Re: mathchoice と settoheight

名前: トノ
日時: 2002-08-22 01:38:48
IPアドレス: 150.35.254.*

>>10345 \rule コマンドを実行しようとするときに、\mathchoice での 4 者択一がまだ行 なわれていないからということでしょう。でも、解決策は思い浮かばない・・・。 以下、大した確認もせずに推測混じりで書いています。 TeX の立場で考えてみましょう。次のようなソースを読込んだとします。 $x^{\mathchoice{D}{T}{S}{SS}} さて、ここまで読込んだ段階で、\mathchoice の引数のうち、どれを選択すべき でしょうか。 x はテキストスタイルのはずで、\mathchoice はその添え字中に あるから S を選択しますか? では、S を選択したと仮定して、さらにソースの続きが次のようになっていたと したらどうなるでしょうか。 \over y$ \over はその左側を分子、その右側を分母として分数を作るコマンドです(すな わち、$a \over b$ は $\frac{a}{b}$ とほぼ同じ)。そうなると、数式の先頭 の x はテキストスタイルの分数の分子ですから、スクリプトスタイルで組まれ ることになります。当然、x の添え字はスクリプトスクリプトスタイルで組まれ ます。\mathchoice での選択は間違っていたことになります。 結局、\mathchoice の引数のうちどれを選択すべきかは、数式モードが終わるま で決定できないわけです。選択が決まっていないということは、その中身が実行 されているはずがない、つまり、斎藤さんの入力例の場合、\rule が現れた時点 では、\settoheight による \Temporarylength への代入はまだ行なわれていな いということになります。一方、\rule コマンドは、テキストスタイル中にある か、スクリプトスタイル中にあるかに依存しないので、数式モードが閉じる前に 実行されてしまい、その際には \Temporarylength の値は初期値である 0pt の ままなので、目に見える罫線は出力されないということでしょう。 今回の入力例そのものは、\mathchoice の各引数部分 {\settoheight{\Temporarylength}{\ensuremath{\displaystyle#1}}}% などを {\settoheight{\Temporarylength}{\ensuremath{\displaystyle#1}}% #1\rule{10pt}{\Temporarylength}}% のようにした上で、 $\height{a}a$ のようにすればうまくいくと思いますが、おそらく実際になさりたいことは、こ んな単純なことではなく、とにかく一旦、長さコマンドに高さを代入しておいて、 あとでどこかで使いたいということだろうと思います。となると・・・どうすれ ばいいんだろう・・・

この書き込みへの返事:

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