見出し画像

『数式組版』を組む技術:出力ルーティーン(1)

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

`\@outputpage`

ここでは出力ルーティーンのごく簡単な説明として,`\@outputpage`をすこしだけみるとする.

その`\@outputpage`が定義されているのは`latex.ltx`である.

これまでみてきたような次のようなものがここで登場する.
これを確認する.

▶ 天アキ量
    ▷ `\topmargin`
    ▷ `\headheight`
    ▷ `\headsep`
>>> https://note.com/yuw/n/n419ad26e4bb7
▶ ノドアキ量
>>> https://note.com/yuw/n/n419ad26e4bb7
▶ 柱とノンブル
    ▷ ヘッダー
    ▷ フッター
    ▷ ノンブル
>>> https://note.com/yuw/n/na722295e8fc1
▶ 版面領域
>>> https://note.com/yuw/n/n69757d635e58

◆ページ形成の準備

\def\@outputpage{%
\begingroup
 \let \protect \noexpand
 \language\document@default@language
 \@resetactivechars
 \global\let\@@if@newlist\if@newlist
 \global\@newlistfalse
 \@parboxrestore

◆ページを形成する外側のボックス

\shipout \vbox{%

`\@outputpage`の最初期でおこなわれた`\begingroup`は,つぎの`\aftergroup`により,`\vbox`が閉じられた後に実行される`\endgroup`により閉じられる.
この`\aftergroup`が再度用いられ,`\endgroup`の実行後に`\set@typeset@protect`が実行されることに注意せよ.

\set@typeset@protect
   \aftergroup \endgroup
   \aftergroup \set@typeset@protect

◆柱とノンブルの準備
つぎは明示的に実行された`\thispagestyle`の処理である.
本書でも,`\chapter`が実行されるとき,この処理が`true`となって,各章タイトルページで通常と異なる柱とノンブルのスタイルを実現される.

\if@specialpage
   \global\@specialpagefalse\@nameuse{ps@\@specialstyle}%
 \fi

つぎのものも柱とノンブルの実現ための一部である.
ヘッダーとフッターとを`\@thehead`と`\@thefoot`とにいれる処理を,見開きか否か,奇数ページか否かで処理を分けている.
また,その際,ノドアキである`\oddsidemargin`と`\evensidemargin`とが`\@themargin`に設定される.

\if@twoside
   \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot
        \let\@themargin\oddsidemargin
   \else \let\@thehead\@evenhead
      \let\@thefoot\@evenfoot \let\@themargin\evensidemargin
   \fi
 \fi

◆初期化
つぎは版面領域の組版を実行するための初期化である.

\reset@font
 \normalsize
 \normalsfcodes
 \let\label\@gobble
 \let\index\@gobble
 \let\glossary\@gobble
 \baselineskip\z@skip \lineskip\z@skip \lineskiplimit\z@

◆最初の参照点移動

判型領域の開始直後に`\topmargin`だけのアキをいれている.

\@begindvi
   \vskip \topmargin

この時点での参照点は,判型領域の左上にあった基準点からスタートして,真下にむかって`\topmargin`だけ移動した状態である.

画像1

◆ページのボックス集合
つぎの`\vbox`はヘッダーと版面領域とフッターとのそれらの間のスペースを含んだボックスである.
この三つのボックスと二つのスペースからなるボックスのことをページのボックス集合とよぶことにする.

つぎによってページのボックス集合が判型領域のノド側である左端から`\@themargin`だけ動かされている.

\moveright\@themargin \vbox {%

この時点で参照点は判型領域の左端を離れている.

画像2

◆ヘッダー
まず,ヘッダーのボックスが作成される.
`\vbox`の開始時に`\vfil`で下の押されていること,`\vbox`の引数が閉じられるパーレンの直後に`%`が置かれ,エディター上の改行にともなうエディター上のスペースを潰していることに注意.

\setbox\@tempboxa \vbox to\headheight{%
       \vfil
       \color@hbox
         \normalcolor
         \hb@xt@\textwidth{\@thehead}%
       \color@endbox
       }%

ヘッダーのボックスの深さが0ptに潰されてのち,ヘッダーがおかれ,その後にヘッダーと版面領域のアキが`\headsep`だけおかれる.

\dp\@tempboxa \z@
     \box\@tempboxa
     \vskip \headsep

この時点で参照点は版面領域が置かれるべき位置の左上に移動していることに注意.

画像3

◆版面領域
つぎの`\@outputbox`が版面領域のボックスである.

\box\@outputbox

◆フッター
版面領域の終了にともない,版面領域とフッターとのアキがとられたのち,フッターが置かれる.

\baselineskip \footskip
     \color@hbox
       \normalcolor
       \hb@xt@\textwidth{\@thefoot}%
     \color@endbox

画像4

◆ページのボックス集合とページを形成する外側のボックス
ここで,ヘッダー,版面領域,フッターのそれぞれのアキを含めたボックスが完成し,右にノドアキ量分だけ移動させられた`\vbox`が閉じられる.

}%

最終的にページに必要なものが出力されてページ全体のボックスが閉じられる.

}%

今回扱わなかったリストカラムの後処理がなされ,この時点でページカウンターが1だけ上がる.
最後に,これも今回扱っていないがマークの処理がなされて終了する.

\global\let\if@newlist\@@if@newlist
 \global \@colht \textheight
 \stepcounter{page}%
 \let\firstmark\botmark
}

以上が`\@outputpage`によりページ内の各要素の配置である.

ページサイズとの関係

ここまでみてきたところまでで,ページの高さである《`\paperheight`》やページの幅である《`\paperwidth`》が表れていない.
それらを用いなくても,論理的にはページの形成に支障はなかったことに注意せよ.

それらは,ページのデザインには版面領域あるいはページのボックス集合の配置にもちろん重要である.
一方,これらは物理的な問題にすぎない.

画像5

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