見出し画像

『数式組版』を組む技術:ワードスペース

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

本稿では欧文のワードスペースを扱う.

画像1

`\spaceskip`

和欧混植にせよ欧文のみの組版にせよ,状況によってどうしても一行オイコミを実現しなければならないことがある.
これをワードスペースを制御することにより実現することを考える.

何かの解説で`\spaceskip`がワードスペースを表すとみたことがあるかもしれない.
ところが`\spaceskip`をワードスペースを縮める目的で,つぎのようにしても望む結果は得られない.

\advance\spaceskip-1pt

画像2

`\spaceskip`は確かにワードスペースを制御することに有効であるが,直接値を代入することによって運用するものである.
この数値を直接代入できる場合はそれでよいが,そうでない場合は現状の組み上りを観察して調整することになる.

現在のワードスペースの値をしるには,TeXに現状のワードスペースを答えさせるのがよい.

`\fontdimen`

ここでは,各書体の各フォントに定義された値をTeXに答えさせる方法を与える.
例のフォントメトリックとして,`ec-lmr10.tfm`を考える.

`ec-lmr10.tfm`を`tftopl`によってテキスト化した結果から,つぎの情報が得られる.

(FAMILY LMROMAN10)
(FACE O 352)
(CODINGSCHEME EC ENCODING /CORK/)
(DESIGNSIZE R 10.0)
...
(FONTDIMEN
  (SLANT R 0.0)
  (SPACE R 0.333333)
  (STRETCH R 0.166667)
  (SHRINK R 0.111112)
  (XHEIGHT R 0.43055)
  (QUAD R 1.0)
  (EXTRASPACE R 0.111112)
...
  )
...

いま興味があるのは,つぎの三つである.

  (SPACE R 0.333333)
  (STRETCH R 0.166667)
  (SHRINK R 0.111112)

それぞれ`FONTDIMEN`の2,3,4番目のパラメータである.
この順序の数字によって値を制御することができる.
すなわち,たとえば`SPACE`はつぎのようにして値を直接制御できる.

\fontdimen2\font

我々の興味の対象である三つのパラメータは,それぞれつぎの意味で用いられる.

▶ `SPACE`:標準ワードスペース
▶ `STRETCH`:伸長最大値
▶ `SHRINK`:縮小最大値

すなわち,いまの場合,最もワードスペースが大きい値は5.00000ptであり,最も小さい値は2.22221ptである.
なおこれはラグ組みでの話であって,両側揃えの場合はワードスペースは必要なだけ伸びうる.

これらの値は,`ec-lmr10.tfm`を調べなくても,つぎのようにしてTeXに答えさせることができる,

\the\fontdimen2\font
\the\fontdimen3\font
\the\fontdimen4\font

:実際に上のコードで得られる数値は小数点が微妙に異なるが,それらは誤差であると考えて差し支えない.

:これらはそれぞれ1/3,1/6,1/9の近似値であり,とても綺麗な数値に思えるが,これらは単なるデザイン上の都合にすぎない.

これらの値を直接制御し,たとえば標準ワードスペースを1ptだけ減じるにはつぎにようにすることで実現できる.

\makeatletter
\@tempdima\fontdimen2\font
\advance\@tempdima -1pt\relax
\fontdimen2\font\@tempdima
\makeatother
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.\par
\makeatletter
\advance\@tempdima 1pt\relax
\fontdimen2\font\@tempdima
\makeatother

つぎの図は上がデフォルトのもので下が“標準ワードスペース”を変更したものである.

画像3

:この操作は`\begingroup`/`\endgroup`などによるグルーピングで抑え込められないことに注意.

上の例では行を減らすほどの効果はなかったが,ワードスペースが確実に減っていることが確認できる.

なお,この方法は`\font`にアクセスしていることからもわかるように,和欧混植時にも欧文のみに影響し制御することが可能である.

この例で得られた値を`\spaceskip`に直接代入することによっても,もちろん同様の効果が得られる.

\spaceskip 2.33pt plus 1.665 minus 1.11

:この`\spaceskip`に直接値を代入する方法は`\begingroup`/`\endgroup`などによるグルーピングでそのスコープを制御できる.

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