数式環境内の(を常に\left(と処理してもらう

数式環境内の(を常に\left(と処理してもらう

- 経瑠姉楕羅 の投稿
返信数: 2
Windows 7,platex,dvipdfm,amsmathを利用しています。
括弧は(や)と書けばよいのですが、括弧の中身が分数になると\left(,\right)を使うべきです。例えば
\begin{align}\left(\frac{1}{6}\right)\end{align}
のような感じです。逆に、
\begin{align}(\frac{1}{6})\end{align}
のように「括弧の大きさをそのままに書きたい」という人はそうそういないでしょう。では、align環境内で(と書くようにし、その括弧を\left(として処理してもらうことは可能でしょうか。これが可能になれば、数式の入力も楽になり、可読性が高まると思うのです。
次のような解決策へのルートが考えられます。
1.ある環境内の特定文字列を置換するコマンドを作る。
\replace[align]{(}{\left(} %こんな命令ありません!
のように。
2.(括弧)を常に中身によって大きさの変わる\left(括弧\right)と解釈する新しい数式環境を作る。
私は普段Perlにより処理しています。詳しい方法は添付ファイルあるいはhttp://heruneedollar.web.fc2.com/pdf/parenthesis.pdf(こちらが最新)に書いています。
経瑠姉楕羅 への返信

Re: 数式環境内の(を常に\left(と処理してもらう

- 匿 名 の投稿
下記のサンプルのようなことをお考えですか?

\documentclass{article}
\DeclareMathDelimiter{\lparen}{\mathopen} {operators}{"28}{largesymbols}{"00}
\DeclareMathDelimiter{\rparen}{\mathclose}{operators}{"29}{largesymbols}{"01}
\begingroup
\catcode`\(=\active \catcode`\)=\active
\gdef({\left\lparen}
\gdef){\right\rparen}
\endgroup
\def\activeparen{\mathcode`\(="8000 \mathcode`\)="8000\relax}
\let\endaciveparen\relax
\begin{document}
\begin{activeparen}
\begin{equation}
  (\frac{\displaystyle (\frac{A}{B})^2 + (\frac{C}{D})^2}
        {\displaystyle (\frac{A'}{B'})^2 + (\frac{C'}{D'})^2})^2
\end{equation}
\end{activeparen}

\begin{equation}
  (\frac{\displaystyle (\frac{A}{B})^2 + (\frac{C}{D})^2}
      {\displaystyle (\frac{A'}{B'})^2 + (\frac{C'}{D'})^2})^2
\end{equation}
\end{document}

ただし,
・半開区間 [0, 1) の表記などのように,数式では ( と ) が必ず対になるわけではない.
・そのため,「自動的に」\left/\right を補うとすれば,
  一般には「すべての」括弧類に対してそのような処理を行わなければならなくなる.
・しかし,「|」,「\|」のごとく \left/\right のどちらを補うべきかが
  文脈依存であるような記号や,「場合分け」の記述のように閉じ括弧が
  省略されるものまで考慮しようとすると,「\left/\right の自動付加」の
  処理は破綻する.
  # 数式の意味内容まで考慮すれば自動化は原理的には可能でしょうが,
  # そのような処理は「組版ソフト」に行わせるには負担の大きすぎる,
  # 高度な AI を要する処理になるでしょう.
のようなことにより,(La)TeX のデフォルトでは自動的に \left/\right を
追加するようなことはなされていません.
# そもそも,\left/\right を用いたのではしばしば大きすぎる括弧が選ばれる
# 傾向があり,体裁にこだわるならむしろ \Bigl 等での調整を優先するところ
# ではないかとも思われます.
匿 名 への返信

Re: 数式環境内の(を常に\left(と処理してもらう

- 経瑠姉楕羅 の投稿
返信ありがとうございます。
さっそくご提示のサンプルを試すとうまくいきました。ブラケット、ブレースに対しても同じ処理をするよう書き加えて使わせていただきます。ありがとうございました。