Re: 数式環境の中で文字を小さくしたい

名前: しっぽ愛好家
日時: 2003-02-01 21:53:56
IPアドレス: 211.4.33.*

>>16036 数式番号部分の文字サイズを固定したいのでしたら, 数式番号を出力する部分の処理に手を加えて \makeatletter %%% オリジナルの定義に \normalsize を追加 \def\@eqnnum{{\normalsize \normalfont \normalcolor (\theequation)}} % %%% amsmath パッケージ使用時には,次の変更も用います. %\def\maketag@@@#1{\hbox{\m@th \normalsize \normalfont#1}} \makeatother くらいの変更を施した後に {\small \begin{equation} ... \end{equation} } くらいの記述を行うところでしょうか. %%% もちろん,数式番号部分の文字サイズを周囲の文字サイズに %%% よらずに固定するか否かを切り替えるフラグを導入して %%% \newif\iffixeqnosize \fixeqnosizetrue %%% \def\@eqnnum{{\iffixeqnosize \normalsize \fi %%% \normalfont \normalcolor (\theequation)}} %%% のようにしても構いません.(\fixeqnosizefalse を適用すると, %%% 数式番号部分の文字サイズも周囲のテキストの文字サイズに追随します.) %%% また,``文字サイズが \normalsize よりも小さい場合のみ \normalsize に %%% 変更'' するようにしても構いません. [余談] LaTeX2e では \footnotesize などの文字サイズ変更マクロ自身は, 数式用フォントの設定を変更しません. %%% 例えば,$\footnotesize f(x)$ のような記述を行っても, %%% f(x) の部分の文字サイズは変わりません. %%% そのことがどういう意図によるのか,というのは開発者でも %%% なんでもない私にはわかりませんが,結局, %%% ``\textfont1 などを数式の途中で変更しようとしても, %%% (数式全体に対してはその数式の終了時での値が用いられるので) %%% 意図どおりの結果にはならない'',ということによるのでしょう. %%% 興味がある方は, %%% \font\egtmit=cmmi8 %%% $f(x) = \textfont1=\egtmit x(x + \alpha)$\par %%% $f(x) = {\textfont1=\egtmit x(x + \alpha)}$ %%% という記述を処理してみてください.2 つの数式のどちらについても %%% (数式の外部の文字サイズが 8pt ではなければ) %%% ``x(x + \alpha)'' の部分だけを 8pt にした出力にはなりません. %%% (``The TeXbook'' の第 17 章に同種の例があります.) では,何故 {\footnotesize $f(x)$} では f(x) の部分の文字サイズが 変更されるか,というと,数式の開始時(*)に ``現在のテキスト用文字サイズ(\f@size)'' と ``現在の数式用文字サイズ(\glb@currsize)'' とを比較し, 相違があれば数式用フォントの再設定を行っているからです. %%% (*) \everymath/\everydisplay を用いています. ところが,実は,equation 環境の場合, \begin{equation} \footnotesize f(x) = x (x + \alpha) \end{equation} という記述を用いても(警告は出ますし,数式番号も小さくなりますが) うまくいってしまいます. これは数式番号の出力に \eqno を用いている都合によります. %%% \eqno を用いると,数式番号の部分を(インライン数式として %%% 作成する都合で)\everymath が用いられますが,LaTeX2e ではその際に, %%% 数式用フォントの再設定もついでに行われてしまいます. [余談・その 2] 興味がある方は,次のような記述を処理してみてください. $A + \mbox{\footnotesize $B$} + C$ \makeatletter \def\check@mathfonts{% \ifx \glb@currsize \f@size \else \glb@settings \init@restore@glb@settings \fi %%% \curr@math@size = ``現在作成中の数式'' での文字サイズ \let\curr@math@size\f@size %%% オリジナルにある次の行の記述を削除してみます. %%% \def\init@restore@glb@settings{\aftergroup\restglb@settings}% } \makeatother $A + \mbox{\footnotesize $B$} + C$ この例から, ・(処理の無駄を避けるために)数式用フォントの再設定は global に行われていること ・数式中で(明示的に作ったボックスの中で)一時的に文字サイズを 変更したような場合のために,グループの終了後に必要に応じて 数式用フォントの再設定が行われている,ということ の 2 点が推察されることでしょう. ちなみに \restglb@settings は次のように定義されるマクロで, このマクロと \check@mathfonts に共通に現れる \glb@settings が 数式用フォントの再設定を必要に応じて実行するマクロです. %%% \glb@settings の定義は引用しませんが,ファイル latex.ltx を %%% みれば,しっかり ``\globaldefs\@ne'' を適用した状態で %%% 数式用フォントの再設定を行っている,ということがわかります. \def\restglb@settings{% \begingroup \let\f@size\curr@math@size \ifx\glb@currsize \f@size \else \glb@settings \fi \endgroup }

この書き込みへの返事:

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