Kodama's home / tips.

Sample LaTeX file

LaTeX samples to manage a margin or position of item.
  1. math-margin.tex
  2. math-margin.dvi

LaTeX 数式の縦/横の調整

文字や記号を格納するボックスの紙面への配置は, TeX, LaTeX の機能そのものと云ってもよい. ここでその全てを説明するほどの余裕はない. 以下では, 数式やテキストの要素の調整に利用することが多いもののみを紹介する. 長さの単位については, 長さ/距離の単位 を参照.
  1. LaTeX サンプル
  2. 大きさを確認する---\fbox
  3. 大きさを確認する---数式環境
  4. 大きさを確認する---\setbox, \wd,\ht,\dp
  5. 縦横の確保---\phantom
  6. 数式の記号の種類---\mathop,\mathbin,\mathrel,\mathord,\mathopen,\mathclose,\mathpunct
  7. 積み重ね---\mathop
  8. 積み重ね---\atop
  9. 積み重ね---\genfrac
  10. 積み重ね---array
  11. 積み重ね---\oalign
  12. 積み重ね---\ialign
  13. 積み重ね---\overset, \underset
  14. 積み重ね---\stackrel
  15. 積み重ね---\buildrel \over
  16. 左右の間隔---\kern
  17. 左右の間隔---\qquad, \quad, ~, \;, \>, \:, \, , \!
  18. 左右の間隔---イタリック補正 \/, 文間 \@, 単語間 ~
  19. 左右の間隔---\hskip
  20. 左右の間隔---\hspace, \hspace*
  21. 左右の間隔---\mspace
  22. 左右の間隔---\hfill, \hss, \hspace{\fill}
  23. 左右位置の調整(重ね合わせ)---\ooalign
  24. 左右位置/幅の調整---\rlap, \llap, \hbox to
  25. 左右位置/幅の調整---\makebox
  26. 上下位置の調整---\raise, \lower
  27. 上下位置/高さ/深さの調整---\raisebox
  28. 高さを潰す---\smash
  29. 高さを広げる---\strut, \mathstrut
  30. 高さを広げる---\rule で支柱を作る
  31. 高さを広げる---\rule による支柱をマクロ化

LaTeX サンプル

以下の内容の LaTeX サンプル.
  1. math-margin.tex
  2. math-margin.dvi

大きさを確認する---\fbox

使用例:
{\fboxsep0pt\fbox{xyz}}

説明:

\fbox{text}
ボックスに枠をつけて, 大きさなどを確認する. TeX では幅,高さ,深さがあるボックスに表示する要素を詰め込んでそれを組み合わせる事で 文書レイアウトを実現している. 細工をするときにはボックスが見えると便利.

\fboxsep は text と 枠線の間隔を決める. 配置を確認するときには, \fboxsep 0pt とすると枠線の影響が少くなる. (枠線の太さの影響は残る.)

大きさを確認する---数式環境

使用例:
$ \sqrt{\mathfbox{x}} $

説明:

$ \mathfbox{数式} $
\mathfbox は数式環境で \fbox 相当の動作を実現する.

使用するには以下の定義をプリアンプルに置く.

\def\mathfbox#1{{\fboxsep0pt\mathchoice
{\fbox{$\displaystyle #1$}}
{\fbox{$\textstyle #1$}}
{\fbox{$\scriptstyle #1$}}
{\fbox{$\scriptscriptstyle #1$}}
}}
\fbox では数式環境での利用が不便なので数式への適用を組み込んだマクロを定義する. 数式環境毎の定義の切替えには \mathchoice を使う.

大きさを確認する---\setbox, \wd,\ht,\dp

\def\showsize#1{\setbox0=\hbox{#1}width=\the\wd0, height=\the\ht0, depth=\the\dp0}%%プリアンプルに置く
\showsize{text}
ボックス番号 0〜9 が準備されている. \setbox でボックスに詰め込んでそのサイズを表示する.

縦横の確保---\phantom

使用例:

X\phantom{MMM}Y, X\fbox{\phantom{MMM}}Y

説明:

\phantom{text}
\phantom は text 部分と同じサイズで見えないボックスを作る.

数式の記号の種類---\mathop,\mathbin,\mathrel,\mathord,\mathopen,\mathclose,\mathpunct

使用例:
数学記号
mathord: $x \mathord{\fbox{M}} y$,$x \forall y$
演算子
mathop: $\displaystyle \mathop{\fbox{M}}_x^y $,$\displaystyle \sum_x^y $
二項演算子
mathbin: $x \mathbin{\fbox{M}} y$, $x + y$
関係子
mathrel: $x \mathrel{\fbox{M}} y$, $x = y$
括弧
mathopen,mathclose: $\mathopen{\fbox{M}} y \mathclose{\fbox{N}} $, $ ( y )$
区切り文字
mathpunct: $x \mathpunct{\fbox{M}} y$, $x , y$
(c.f fontmath.ltx)

説明:
数式環境では 数学記号, 二項演算子, 関係子, 括弧, 区切り文字 などの用途に応じて記号の間隔を定めている. 記号を作成したら, 数式中でどのように扱うか決めないと意図したような文字組にならない.

積み重ね---\mathop

使用例:

$\displaystyle \mathop{E}^{x}_{y} z$
$\textstyle \mathop{E}^{x}_{y} z$
$\displaystyle \mathop{E}\nolimits^{x}_{y} z$
$\textstyle \mathop{E}\limits^{x}_{y} z$,

説明:
単項演算子として扱う. \displaystyle で \mathop を使うと 上置き,下置き になる. \textstyle では 上付き,下付きになる. \displaystyle で上付き,下付きにするには \nolimits を使う. \textstyle では上置き,下置きにするには \limits を使う.

積み重ね---\atop

使用例:

${x\atop y}, \left(x\atop y\right)$

説明:

$ {{上}\atop{下}} $
分数の横棒のないもの.

積み重ね---\genfrac

使用例:

\usepackage{amsmath} % プリアンプルに置く
$ \genfrac{}{}{}{}{x}{y},\genfrac{(}{)}{0pt}{0}{x}{y}, \genfrac{[}{]}{}{1}{x}{y} $

説明:

\genfrac{開き括弧}{閉じ括弧}{分数の横棒の太さ}{数式スタイル}{上}{下}
分数を修正する場合 \genfrac で作りなおしても良いだろう. また, \atop の代わりに \genfrac を使うのも良い.

数式スタイルは番号で与える:

AmS-LaTeX のマクロなので プリアンプルに \usepackage{amsmath} が必要.

積み重ね---array

使用例:

$\begin{array}{c}x\\y\end{array}$

説明:
積み重ねに 1列だけの array を使っても良いが, 1つの記号としてまとめるには間隔などが広すぎる. 次の oalign は array の間隔を詰めたものと考えて良い.

積み重ね---\oalign

使用例:

\oalign{{X}\crcr{Y}},
\oalign{{\hss X\hss}\crcr{\rule{1em}{.3pt}}\crcr{\hss Y\hss}}

説明:

\oalign{text \crcr text \crcr ... \crcr text}
\oalign は複数の要素を積み重ねる. 間隔の調整が必要なら \ialign を使う.

積み重ね---\ialign

使用例:

  \leavevmode\vtop{\baselineskip0ex \lineskip.25ex \ialign{#\crcr{X}\crcr{Y}\crcr}}

説明:
\ialign は \oalign, \ooalign, 表組 などの元になっている. \lineskip の部分で, 積み重ねの間隔の調整ができる.

積み重ね---\overset, \underset

使用例:

\usepackage{amsmath} % プリアンプルに置く
$ \overset{n}{E} + \underset{n}{E} $

説明:

\overset{上}{本体}
\underset{下}{本体}
上下に飾りをつける. AmS-LaTeX のマクロなので プリアンプルに \usepackage{amsmath} が必要.

積み重ね---\stackrel

使用例:

$ x \stackrel{\mathrm D}{=} y $

説明:

\stackrel{上}{本体}
\stackrel は記号の上に式を重ねて関係子を作る.

積み重ね---\buildrel \over

使用例:

$ x \buildrel{D}\over{=} x $

説明:

$\buildrel{上}\over{本体}$
\buildrel \over は記号を重ねて関係子を作る. \stackrel とほぼ同じ.

左右の間隔---\kern

使用例:

{X}\kern.5em{Y}\kern-.2em{Z}

説明:
\kern は引き続くボックスの間隔を調整する.

左右の間隔---\qquad, \quad, ~, \;, \>, \:, \, , \!

使用例:

$1m\qquad{}n,2m\quad{}n,3m\ n,4m~n,5m\;n,6m\>n,7m\:n,8m\,n,9m\!n,0mn$

説明:
数式モードでの間隔の調整(大きい方から).
注. \! はマイナスの幅.

左右の間隔---イタリック補正 \/, 文間 \@, 単語間 ~

使用例:

イタリック補正なし(r{\it i}r), 補正あり(r{\it i \/}r)\\
単語間(I. I), 文間(I\@. I)\\
単語間スペース: 調整なし(etc. x$\alpha \beta \gamma$ y z), あり(etc.\ x\ $\alpha\ \beta{} \gamma$~y~z)

説明:

  1. イタリック(\it), 斜体(\sl), 太文字(\bf) の後でローマン体に戻ったときに 文字間がつまってしまう場合, \/ で補正する.
  2. 大文字の後の . は略字と解釈されて単語間スペース扱いになってしまう. 文間スペースにするには \@ を入れる.
  3. 小文字の後の . の次は 文間スペースが入るが, 単語間スペースにするには \(空白) を入れる.
  4. マクロの後の空白は無視される. 強制的に開けるには \(空白) を入れる
  5. 単語間スペースで改行を回避するには ~ を入れる.

左右の間隔---\hskip

x\hskip2em y

説明:
間隔を空ける.

左右の間隔---\hspace, \hspace*

x\hspace{2em} y \\
\hspace*{2em} z

説明:
間隔を空ける. 強制改行直後なら \hspace* を使う.

左右の間隔---\mspace

使用例:

\usepackage{amsmath} % プリアンプルに置く
$m\mspace{10mu}n$, $m\mspace{-5mu}n$

説明:
数式環境で指定した長さの間隔を空けるには \mspace を使う. 間隔は負の数値も指定できる. 長さの単位 1mu = 1/18em. AmS-LaTeX のマクロなので プリアンプルに \usepackage{amsmath} が必要.

左右の間隔---\hfill, \hss, \hspace{\fill}

使用例:

\leavevmode
\hbox to 5cm{A\hspace{\fill}B\hspace{\stretch{2}}C}\\
\hbox to 5cm{A\hfill B\hfill \hfill C}\\
\hbox to 5cm{A\hss B\hss \hss C}\\

説明:

\hspace{\hfill}
\hspace{\stretch{n}}
\hfill
\hss
等間隔に要素を配置するには, 自由に延びる空白を入れる.

\hspace で自由に延びる長さを指定するには, 長さに \fill を使うと良い. \fill のかわりに \stretch{n} を使うと延びやすさが n 倍になる.

\hspace{\fill} の略記として \hfill がある.

\hfill は元の長さが 0pt で自由に延びるが, 縮むことはない. 延び縮みする空白としては \hss が用意されている.

左右位置の調整(重ね合わせ)---\ooalign

使用例:

{\ooalign{{O}\crcr{\hss/\hss}}}
{\ooalign{{O}\crcr{\hss/\hss}\crcr{\hss=\hss}}}

説明:

{\ooalign{text  \crcr text \crcr ... \crcr text}}
文字を重ねるときに使う. 上下の位置を調整すると記号の積み重ねにも使える. {} に閉じ込めて使うこと.

左右位置/幅の調整---\rlap, \llap, \hbox to

使用例:

X\hbox to 0pt{Y\hss}Z, X\rlap{Y}Z \\
X\hbox to 0pt{\hss Y}Z, X\llap{Y}Z

説明:
\hbox to 0pt{ } で幅 0pt のボックスを作って文字を重ねる.

\hbox to 0pt{...} の略記として \rlap, \llap がある.

左右位置/幅の調整---\makebox

使用例:

X\makebox[4em][l]{Y}Z,X\makebox[4em][r]{Y}Z

説明:

\makebox[width][pos]{text}
width の幅のボックスを作る. text の埋め込む位置を pos(r 又は l) で指定できる. \hbox to ... とほぼ同じ.

上下位置の調整---\raise, \lower

印字位置を上下にずらすには \raise , \lower を使う.

使用例:

X\raise1ex\hbox{Y} Z, X \lower1ex\hbox{Y} Z

説明:

\raise持ち上げ\hbox{text}
\lower沈みこみ\hbox{text}

上下位置/高さ/深さの調整---\raisebox

使用例:

X\raisebox{2ex}[1ex][0ex]{Y}Z

説明:

\raisebox{raise_len}[height][depth]{text}
\raisebox を使うと印字位置の調整と同時に, ボックスの大きさも変更できる. text 部分の高さ,深さを設定し, それを raise_len だけ上下に移動させる.

高さを潰す---\smash

{\fboxsep0pt \fbox{\smash{text}}}

説明:
text の高さ,深さを 0pt にする. \raisebox で height,depth を 0pt にするのとほぼ同じ. 表などで文字組を乱したくない場合に使うと良い.

高さを広げる---\strut, \mathstrut

使用例:

$\sqrt{x\strut}+\sqrt{y\mathstrut}$

説明:
\strut は高さが 0.7\baselineskip, 深さ 0.3\baselineskip の支柱. \mathstrut は ( 相当の上下の間隔を持つ支柱.

高さを広げる---\rule で支柱を作る

\strut では高さに不満があるなら, 自前で支柱を作っても良い.

使用例;

$\sqrt{x\rule{0pt}{2ex}}$

説明:

\rule[上方への移動]{幅}{高さ}
\rule は幅と高さを指定して長方形を描くマクロだが, 幅を 0pt とすると, 見えない柱を立てることができる.

高さを広げる---\rule による支柱をマクロ化

上下にすき間を作るマクロを作ってみた.

使用例:

$\sqrt{\vmargin{1ex}{0ex}{x}}$

説明:
\vmargin は 3番目の引数の内容に上下のすき間を開けて数式内に書き込む.

\vmargin{上方向の間隔}{下方向の間隔}{印字内容}

マクロの定義:
以下を プリアンプル 部分に書き込む.

\makeatletter
\def\vmargin@#1#2#3{%% #3 with upper-margin #1, lower-margin #2
\setbox0=\hbox{#3}%
\rule[#1]{0pt}{\ht0}%
\lower\dp0\hbox{\rule[-#2]{0pt}{\dp0}}%
\box0%
}
\def\vmargin#1#2#3{%% #3 with upper-margin #1, lower-margin #2
\mathchoice
{\vmargin@{#1}{#2}{$\displaystyle #3$}}
{\vmargin@{#1}{#2}{$\textstyle #3$}}
{\vmargin@{#1}{#2}{$\scriptstyle #3$}}
{\vmargin@{#1}{#2}{$\scriptscriptstyle #3$}}
}
\makeatother

Kodama's home / tips.