見出し画像

『数式組版』を組む技術:ディスプレイ数式(3)

本稿において,“本書”とは木枝祐介著『数式組版』ラムダノート(2018)のことである.
>>> https://www.lambdanote.com/collections/mathtypo
また,本書はLuaLaTeXを用いて組まれた.したがって本稿ではLuaLaTeXの使用を前提としている.
本書が組まれた当時はTeX Live 2017が用いられたが,多くのコードはそれより後のTeX Live 2019まで共通して使用可能である.
本稿では,バージョンに強く依存する場合を除いて,各バージョンは明記されないことがある.

連立(2)

『ディスプレイ数式(2)』(https://note.com/yuw/n/n36273c037d1d)でもみた次の連立を考える.

画像1

本稿ではこの例で開きのブレスの大きさについて,なぜこの大きさが選択されているのかを扱う.

◆基礎支柱と実体ボックス
`array`環境は一見複雑であるが,各行の縦方向の大きさの理解について鍵となるのは`latex.ltx`で定義されているマクロ`\@array`である.

\def\@array[#1]#2{%
 \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi
 \bgroup
 \setbox\@arstrutbox\hbox{%
   \vrule \@height\arraystretch\ht\strutbox
          \@depth\arraystretch \dp\strutbox
          \@width\z@}%
 \@mkpream{#2}%
 \edef\@preamble{%
   \ialign \noexpand\@halignto
     \bgroup \@arstrut \@preamble \tabskip\z@skip \cr}%
 \let\@startpbox\@@startpbox \let\@endpbox\@@endpbox
 \let\tabularnewline\\%
   \let\par\@empty
   \let\@sharp##%
   \set@typeset@protect
   \lineskip\z@skip\baselineskip\z@skip
   \ifhmode \@preamerr\z@ \@@par\fi
   \@preamble}

`\@array`にあるボックス`\@arstrutbox`を基礎支柱とよぶことにする.
基礎ボックスは`\@width\z@`と定義され,出力されない支柱となる.
その支柱の高さと深さの設定で用いられている`\strutbox`は『脚注』(https://note.com/yuw/n/n1fa1f19c52a2)の稿でも述べたように,当該フォント(サイズ)の行送りの大きさを高さ7割,蒸さに3割を割り振ったボックスである.

また,数式自体のボックスを実体ボックスとよぶことにする.

基礎支柱を青で,実体ボックスを緑で明示したものが次の図である.

画像2

この図を観察するとわかるように,各行の縦方向の大きさは次のようになる.
つなわち,基礎支柱と実体ボックスとの大きい方が隣接した縦方向の合計の大きさである.

◆行間スペースが入る場所と大きさ

『ディスプレイ数式(2)』(https://note.com/yuw/n/n36273c037d1d)では各行の接近解消の方法として`\\`のオプション引数による方法をとりあげた.
よく知られたように,この`\\`にオプション引数に例えば10ptと入力しても,一般に行間が10pt空くわけではない.

この挙動の理解の鍵は`latex.ltx`で定義されている`\@xargarraycr`である.

\def\@xargarraycr#1{\@tempdima #1\advance\@tempdima \dp \@arstrutbox
  \vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr}

`\@xargarraycr`もまた幅が0ptであり,見えない支柱である.

`\\`にオプション引数を与えた場合この見えない支柱が利用される.
どのようにスペースが加えられるのかを赤で示したのが次の図である.

画像3

この図からわかるように,`\\`を記した行のベースラインから下方に伸び,次行を押し下げている.
この機構によって`\\`のオプション引数に与えた数値と行間にギャップが生まれるのである.

この記事が気に入ったらサポートをしてみませんか?