RE:意外なエラー(\mathrm と tabular)

名前: みなも
日時: 2005-02-27 21:37:39
IPアドレス: 211.133.27.*

Th\'or さん,.さん,大石 さん,本田 さん,初めまして&お久しぶりです。 レスありがとうございます。おかげで,エラーの原因がわかりました。 #もう結論は出たようなものですので,まとめレスで失礼します。 結局, 1. pLaTeX の \mathrm は定義が和文フォントも使えるよう改良されていて, \mathrm{中味} が \ifmmode \ifx \math@bgroup \@empty \@mathrm \relax \@mathmc \relax 中味 \relax \else \ifx \math@bgroup \relax \@mathrm \relax \@fontswitch \relax {\@mathmc }中味\relax \else \@mathrm {\@mathmc {中味}}\fi \fi \else \@mathrm {中味}\fi のように「中味」つきで条件分岐の中に入れられてしまうことが1つ。 (LaTeX の \mathrm は「中味」が条件分岐に入らないようになっている)。 2. TeX は条件分岐で「要らない方」(真だったら \else 〜 \fi , 偽だったら \if命令〜\else の部分) を「読み飛ばしモード」で処理する。 で,読み飛ばしモードでは一部のトークン(命令など)以外は文字通り 読み飛ばす(注)ため,「中味」に tabular 環境が入っていても, \begin{tabular} なんかは読み飛ばしてしまう。 (注)すべてを読み飛ばすわけではない --- たとえば当たり前の話ですが, \fi を読み飛ばすと,いつまでも終わらなくなります。 3. でも $\mathrm{}$ の外側でも tabular 環境を使っていたため, はだかの & や \cr が,読み飛ばしては「いけない」ものとして リストアップされていた。 4. で,結局「中味」の & を外側の tabular 環境の & と誤認して, 「\if 文が完了していないのにカラム変更は受け付けないよ」のエラーが出た。 ということのようですね。 むぅ。しかし,内部での定義を知らずにソースだけ見てると, こんなエラーが起こるとは想像もつかないですね。 ちなみに,なんの仕事をしてこのエラーが出たかというと, 化学反応式(文字はローマンで上付き・下付あり)を \mathrm で書いていて, 化学式の一部が構造式だったので,これを tabular 環境を使って書き, こうやって作った化学式を3つほど,tabular 環境を使って積み上げた --- ときに出ました。 40行ぐらいある中からエラーの原因を絞り込むのが大変でした。トホ〜。 ではまた仕事に戻ります。(涙)

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)