Re: \hfill と \hfil について

名前: しっぽ愛好家
日時: 2003-07-04 14:40:17
IPアドレス: 210.234.40.*

>>19902 例えば,ボックスの中で \hbox to100pt{\hfil $x$\hfil $y$\hfil} \hbox to100pt{\hfill $x$\hfill $y$\hfill} のような具合に \hfil,\hfill を用いると,(意図どおりに)``$x$ の前'', ``$x$ と $y$ の間'',``$y$ の後'' の 3 箇所に同じ大きさの空白が 生成されます. 一方, \hfill$x$\hfill $y$\hfill %%% 最後の \hfill の後で改段落 の場合は,最後の \hfill によるグルーが取り除かれ,さらに,段落の終端に \parfillskip で与えられるグルーが追加されます(*). \parfillskip のデフォルトの値は 0pt plus 1fil で,これは \hfil が与える グルーと同じ大きさです.したがって,上記の行は \hfill$x$\hfill $y$\hfil %%% \hbox to\linewidth{\hfill$x$\hfill $y$\hfil} として出力されます(最後の \hfill が取り除かれたのち,\hskip\parfillskip (デフォルトでは \hfil と同じ)に変わります). ここで,\hfill は \hfil よりも無限に強いことに注意すると, 最後の \hfill が無視されたような出力になることがわかります. %%% なお,\fil または \hfill を段落間で用いると段落を暗黙のうちに開始する, %%% ということに注意してください(つまり,先頭の \hfill は, %%% 今の場合には失われません). %%% また,段落の終端のグルーが取り除かれる,というのは,欧文の長文を %%% 作成する場合を考えてみれば,自然なことだとわかることでしょう. %%% %%% 例えば, %%% %%% ... something. (←個々で改行し,次に空白行がある) %%% %%% という場合に,something. の直後の改行に由来する空白は %%% %%% 無駄なグルーにしかなりません.したがって,そのようなグルーを %%% %%% 無視することにしているわけです. %%% (*) 丁寧には,段落を構成する個々の行の左端・右端にそれぞれ %%% \leftskip,\rightskip で与えられるグルーも追加されますが, %%% これらのグルーのデフォルトの値は 0pt plus 0pt minus 0pt なので, %%% ここでは \leftskip/\rightskip を考慮しませんでした. %%% %%% center 環境などの中,といったところを考える場合には話は異なります. さらに, \hfil$x$\hfil $y$\hfil %%% 最後の \hfil の後で改段落 の場合にも最後の \hfil を取り除いたのちに,\parfillskip の大きさの グルーを置くわけです.しかし,その結果の \hfil$x$\hfil $y$\hfil というのは元の記述と変わらないので,段落の最後の \hfil が 用いられている *かのように* 見えます. 最後に, \hfill $x$ \hfill $y$ \hspace{\fill} または \hfill $x$ \hfill $y$ \hspace*{\fill} %%% どちらも,直後に空白行を入れます の場合には,\hspace{\fill} または \hspace*{\fill} の直後に(改行に 由来する)グルーが入り,そのグルーだけが改段落の際に無視されるので, \hspace{\hfill} または \hspace*{\hfill} が有効になります. さらに, \hfill $x$ \hfill $y$ \hspace{\fill}% または \hfill $x$ \hfill $y$ \hspace*{\fill}% %%% どちらも,直後に空白行を入れます の場合,(* なしの)\hspace を用いた方では \hspace が無視されます. %%% 実際,\hfill $x$ \hfill $y$ \hfill と同じになっています. 一方,\hspace* を用いた方では \hspace が無視されません. これは,単に,\hspace を * つきで用いて \hspace*{<length>} とした場合には \vrule width 0pt \nobreak \hskip<length> \hskip 0pt plus 0pt minus 0pt として扱われる,ということによります. %%% つまり,段落の最後に \hspace*{...} がある場合,改段落の際に %%% 無視されるグルーは \hspace が追加した大きさ 0pt のグルーの方になる, %%% ということです. 以上,段落の最後の \hfil,\hfill の挙動は,改段落の際には段落の 最後のグルーは取り除かれることと,\parfillskip(および \leftskip, \rightskip)といった段落の体裁に関わるグルーに注意すれば おわかりになることでしょう. %%% ここでは,\hfil と \hfill の強弱関係は重要ではありません. さて,\hfil,\hfill の使い分けについては, ``程度の違う無限大'' を必要としない場合(たいていの場合, そうなります)には単に \hfill を用いれば充分でしょう.

この書き込みへの返事:

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