Re: 指数の大きさや位置を調節したい 中間(最終?)報告

名前: tommy_minor
日時: 2007-12-07 15:01:24
IPアドレス: 210.167.86.*

以前(>>50314), >高校生向けの文書には,圧縮スタイルは余計な仕様だと思います と書きましたが,これは訂正します. 実際には圧縮スタイルのほうがバランスがいいこともあるので, 「ディスプレイスタイル,テキストスタイル,圧縮スタイルの区別は余計」 と言い直します. >>50315 の本田さんのアドバイスを受け,TeX Book, tftopl.pdf/pltotf.pdfを 読み進めてみましたが,分かったことは ・これらを参考にしても,指数の位置を動かすのは簡単ではない ということだけです.tfm(pl)ファイルをいじって高さや深さを変えたら, 変えたくないところまで変わってしまうのではないでしょうか. TeX Book Appendix G も,組版のルールが書いてあるだけで (それさえも私には今ひとつピンと来ませんでしたが), 指数の位置の調節の仕方はよく分からなかったです. ディスプレイスタイル,テキストスタイル,圧縮スタイルの区別をなくすのは 無理でしょうし,それ程有意義でもないでしょうから (それぞれにバランスのよい組み方があるので), 個別に,或いはマクロで対応するのが現実的であろうと思われます. デフォルトで我慢するのが一番いいのかもしれませんが… (「どんな数式でも組める」と謳っている割には 「指数の位置すら気軽に変更できないのかよ」って感じです…. 私のスキルが乏しいことが最も大きな理由ではありますが, 改めて「TeXはなんて不便なのだろう」と思った次第です. TeXnicianへの道のりは険しすぎます.) 以前書き込んだマクロを改変しました. そして,また新たな謎が生じました. それを皆さんに検証して頂きたいのです. 以下の文書をぜひコンパイルしてご覧ください. \documentclass[fleqn]{jarticle} \usepackage{amsmath} %\usepackage{ceo} \pagestyle{empty} \DeclareMathSizes{10}{10}{6}{5}%デフォルトは{10}{10}{7}{5}らしい \def\defaultscriptratio{.6} \def\defaultscriptscriptratio{.5} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ^[#1,#2]#3 % #1:横方向位置補正 % #2:縦方向位置補正 % #3:指数 %---------------------------------------------------------- \makeatletter \edef\ue@s@eji{^}% \catcode`\^=13% ^をアクティブ文字に変更 \DeclareRobustCommand^{\@ifnextchar[{\UEs@eji}{\UEs@eji[0,0]}}% \def\UEs@eji[#1,#2]#3{% \dimen0=\z@\relax% \advance\dimen0 #1\p@% 横位置補正 \dimen1=\z@\relax% \advance\dimen1 #2\p@% 縦位置補正 \ue@s@eji{% \mathchoice% {\kern\dimen0\raise\dimen1\hbox{$\m@th\displaystyle#3$}}% {\kern\dimen0\raise\dimen1\hbox{$\m@th\textstyle#3$}}% {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptstyle#3$}}% {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptscriptstyle#3$}}% }% }% \makeatother \catcode`\^=7 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} \verb/\DeclareMathSizes{10}{10}{6}{5}/のデフォルト $2x^2,~y^n,~f_n^m,~2^n_m$←最後の2つは指数が低くやや見苦しい \[c_n^2,{a_{2n}}^2,e^{\frac{x^2}{2}} ,2^{2^{2^{2^2}}},\frac{2^x}{3}\] $\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2$ ←ceoだと右の指数が少し高く見える \vspace{1zh} マクロ化した\verb/^/ \catcode`\^=13 $2x^2,~y^n,~f_n^[0,1]m,~2^[0,1]n_m$←少し持ち上げてみた \[c_n^2,{a_{2n}}^2,e^{\frac{x^2}{2}} ,2^{2^{2^{2^2}}},\frac{2^[0,1]x}{3}\] $\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^[0,-1]2$←少し下げた \iffalse%%% この行と(30行ほど下へ) 2行目の最初の2つ,下付き文字の底が揃っておらず少し嫌です. そこで,同じ調子で\verb/_/をマクロ化してみましたのですが… %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % _[#1,#2]#3 % #1:横方向位置補正 % #2:縦方向位置補正 % #3:指数 %---------------------------------------------------------- \makeatletter \edef\sita@s@eji{_} \catcode`\_=13% _をアクティブ文字に変更 \DeclareRobustCommand_{\@ifnextchar[{\SITAs@eji}{\SITAs@eji[0,0]}}% \def\SITAs@eji[#1,#2]#3{% \dimen0=\z@\relax% \advance\dimen0 #1\p@% 横位置補正 \dimen1=\z@\relax% \advance\dimen1 #2\p@% 縦位置補正 \sita@s@eji{% \mathchoice% {\kern\dimen0\raise\dimen1\hbox{$\m@th\displaystyle#3$}}% {\kern\dimen0\raise\dimen1\hbox{$\m@th\textstyle#3$}}% {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptstyle#3$}}% {\kern\dimen0\raise\dimen1\hbox{$\m@th\scriptscriptstyle#3$}}% }% }% \makeatother \catcode`\_=8 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \catcode`\_=13 ところが,これで\verb/$c_n^2$/をコンパイルしようとすると, 「Double subscript」と警告が出て止まります. $c_n^2$ \[a_n,~2^{2^{2^{2^2}}}\] \fi%%% (30行ほど上から)この行をコメントアウトすると,おかしなことが起こります. \vspace{1zh} 実は,先のマクロ化した\verb/^/だけでもおかしなことが起こります. \verb*/\ /で区切るとまずいようなのです. %$2^x,\ x^2$%%% 行頭の%を取ると,「Double subscript」と警告が出て止まります. \verb/^/と\verb/_/の定義の順番を入れ換えてみるのも面白いです. 興味のある人はぜひ. \catcode`\^=7 \catcode`\_=8 \newpage おまけ:TeX Book Appendix G の訳 内容がいまいちピンと来なかったのは, 私の英語力のせいかもしれません. 指数に関係がありそうなところだけを訳出しました. (前略) 最も重要なパラメータは数学記号フォント(family 2)と 拡張数学記号フォント(family 3)に現れる. \TeX が数式を組むためには,\verb/\textfont2,\scriptfont2,\scriptscriptfont2/の それぞれが,少なくとも22個の\verb/\fontdimen/パラメータ($\sigma_{??}$)を 持たなければならない. また,\verb/\textfont3,\scriptfont3,\scriptscriptfont3/のそれぞれが, 少なくとも13個の\verb/\fontdimen/パラメータ($\xi_{??}$)を持たなければならない. (中略) ボックス$x$の高さ,深さ,幅をそれぞれ$h(x),~d(x),~w(x)$で表す. (中略) \section*{18a.} 核(を翻訳したもの)が文字ボックスであるときは, (ひょっとしたらカーンを従えて,) $u$および$v$を0とする. そうでなければ,$u=h-q,~v=d+r$とする. ここで,$h,~d$はそれぞれ核の高さと深さであり, $q$は現在のスタイルの上付きスタイル$C\uparrow$の \verb/\fontdimen/パラメータ$\sigma_{18}(=\text{sup\_dorp})$で, $r$は現在のスタイルの下付きスタイル$C\downarrow$の \verb/\fontdimen/パラメータ$\sigma_{19}(=\text{sub\_dorp})$である. ($u,~v$は上付き文字,下付き文字の上げ下ろしの最少量を表す. これらは後で増やす.) \section*{18b.} 上付き文字フィールドが空のとき(つまり,下付き文字のみのとき), ボックス$x$を現在のスタイルの下付きスタイル$C\downarrow$として組み, $x$の幅$w(x)$に\verb/\scriptspace/を加える. このボックスを当座のアトム(をボックスの並びに翻訳したもの)に $v,~\sigma_{16},~h(x)-\frac{4}{5}|\sigma_5|$のうちで最大のものの 分だけ下げてくっ付ける($\sigma_5=\>$1ex(xの高さ)).そして次の要素に進む. (これは,下付き文字の天辺が$\frac{4}{5}$exよりも高くならないようにするため.) \section*{18c.} ボックス$x$を現在のスタイルの上付きスタイル$C\uparrow$として組み, $x$の幅$w(x)$に\verb/\scriptspace/を加える. そして,$u,~p,~d(x)+\frac{1}{4}|\sigma_5|$のうちで最大のものを, 改めて$u$とおく.ここで,$p$は, \begin{itemize} \item 現在のスタイルがディスプレイスタイルのとき,$p=\sigma_{13}(=\text{sup1}),$ \item $C=C'$のとき,$p=\sigma_{15}(=\text{sup3}),$ \item その他のとき,$p=\sigma_{14}(=\text{sup2})$ \end{itemize} である.これが上付き文字の仮の位置を与える. \section*{18d.} 下付き文字フィールドが空のとき(つまり,上付き文字のみのとき), ボックス$x$を当座のアトム(をボックスの並びに翻訳したもの)に $u$だけ持ち上げてくっ付ける.そして次の要素に進む. そうでないとき(つまり,下付き文字,上付き文字がともに存在するとき)は, ボックス$y$を現在のスタイルの下付きスタイルとして組み, $y$の幅$w(y)$に\verb/\scriptspace/を加え, $v$,$\sigma_{17}$(sub2)のうちの大きいほうを改めて$v$とする. \section*{18e.} (残っている処理は下付き文字と上付き文字の組み合わせの配置である.) $\theta=\xi_8$(default rule thickness)とする. $(u-d(x))-(h(y)-v)\ge4\theta$のときは18f.に進む. (これは,つまり,下付き文字と上付き文字の間の空白は, 少なくとも$4\theta$は空くことを意味する.) そうでないときは,$(u-d(x))-(h(y)-v)=4\theta$をみたすように $v$を設定し直す. $\psi=\frac{4}{5}|\sigma_5|-(u-d(x))$とする($\sigma_5=\>$1ex(xの高さ)). $\psi>0$のときは,$u$を$\psi$だけ増やし,$v$を$\psi$だけ減らす. (これは,上付き文字の底(bottom)は,少なくとも $\frac{4}{5}$exはベースラインよりも高い位置に来ることを意味する.) \section*{18f.} (略) (後略) \end{document}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)