📝

KaTeXの行間と字間

2024/04/11に公開

はじめに

KaTeXではソースに空白文字を置くだけでは空白が出力されません。
これを利用してソースを読みやすくするために空白を使えます。

a  b
c
a b c

この記事では、KaTeXで文字間隔を調整する方法や自動で挿入される字間について説明します。

https://katex.org/docs/supported

空白文字の表

文字間隔を増減させるコマンドの表です。

関数 表示 関数 表示
\, 3/18 em スペース \kern{distance} distance のスペース、mu 単位不可
\thinspace 3/18 em スペース \mkern{distance} distance のスペース、mu 単位のみ、数式モード限定
\> 4/18 em スペース \mskip{distance} distance のスペース、mu 単位のみ、数式モード限定
\: 4/18 em スペース \hskip{distance} distance のスペース、mu 単位不可
\medspace 4/18 em スペース \hspace{distance} distance のスペース、mu 単位不可
\; 5/18 em スペース \hspace*{distance} distance のスペース、mu 単位不可、数式モード限定
\thickspace 5/18 em スペース \phantom{content} content の幅と高さのスペース
\enspace 1/2 em スペース \hphantom{content} content の幅のスペース
\quad 1 em スペース \vphantom{content} content の高さの支柱
\qquad 2 em スペース \! – 3/18 em スペース
~ ノーブレークスペース \negthinspace – 3/18 em スペース
\nobreakspace ノーブレークスペース \negmedspace – 4/18 em スペース
\<スペース> 半角スペース \negthickspace – 5/18 em スペース
\space 半角スペース \mathstrut \vphantom{(}
a \, b \> c \: d \enspace e \quad f \qquad g \ h
a \, b \> c \: d \enspace e \quad f \qquad g \ h

ノーブレークスペースは空白を入れますが、その場所での改行による分割を許しません。

ab~cd
ab~cd

distance#KaTex単位 で指定します。
マイナスのスペースは字間を縮めます。

a \kern{1em} b \mkern{2mu} c \\
a \hspace{1em} b \hspace{1.5em} c \\
a \hspace{0em} b \\
a \hspace{-0.2em} b \\
a \kern{1em} b \mkern{2mu} c \\ a \hspace{1em} b \hspace{1.5em} c \\ a \hspace{0em} b \\ a \hspace{-0.2em} b \\

\phantom\hphantom\vphantomは空間だけを確保して実際には何も表示しません。

\frac{1}{3} + \frac{1}{5} = \boxed{\phantom{\frac{8}{15}}} \\
\sqrt{\vphantom{\frac{1}{2}}1} \sqrt{\frac{1}{2}} \\
abcde \\
a \hphantom{bcd} e
\frac{1}{3} + \frac{1}{5} = \boxed{\phantom{\frac{8}{15}}} \\ \sqrt{\vphantom{\frac{1}{2}}1} \sqrt{\frac{1}{2}} \\ abcde \\ a \hphantom{bcd} e

\\\newlineは改行です。
\\[distance]は行の間隔を制御します。
\\を複数連続しても空行は倍にならないので、\\[1em]のように距離を指定して行間を広げます。

aX \\ \\
\\
bX \\
cX \\[1em]
dX \\[2em]
eX \\[0em]
fX \\[-0.5em]
gX
aX \\ \\ \\ bX \\ cX \\[1em] dX \\[2em] eX \\[0em] fX \\[-0.2em] gX \\[-0.5em] hX

KaTeX単位

KaTeX 単位 KaTeX 単位
em CSS em(フォントサイズ) bp 1/72 inch × F × G
ex CSS ex(文字 x の高さ) pc 12 KaTeX pt
mu 1/18 CSS em dd 1238/1157 KaTeX pt
pt 1/72.27 inch × F × G cc 14856/1157 KaTeX pt
mm 1 mm × F × G nd 685/642 KaTeX pt
cm 1 cm × F × G nc 1370/107 KaTeX pt
in 1 inch × F × G sp 1/65536 KaTeX pt
abc \\
a \hspace{1em} b \hspace{1.5em} c \hspace{2em} d\\
a \hspace{1cm} b \hspace{1in} c \hspace{1ex} d
abc \\ a \hspace{1em} b \hspace{1.5em} c \hspace{2em} d\\ a \hspace{1cm} b \hspace{1in} c \hspace{1ex} d

Fは(周りの HTML テキストのフォントサイズ) / (10 pt)です。

Gはデフォルトで1.21(KaTeX フォントサイズは通常 1.21 × 周りのフォントサイズであるため)です。この値はCSSで設定できます。

.katex { font-size: 1.1em; }

スタイルとサイズの効果:

単位 textstyle scriptstyle scriptscript huge
em または ex \rule{1em}{1em} \scriptstyle\rule{1em}{1em} \scriptscriptstyle\rule{1em}{1em} \huge\rule{1em}{1em}
mu \rule{18mu}{18mu} \scriptstyle\rule{18mu}{18mu} \scriptscriptstyle\rule{18mu}{18mu} \huge\rule{18mu}{18mu}
その他 \rule{10pt}{10pt} \scriptstyle\rule{10pt}{10pt} \scriptscriptstyle\rule{10pt}{10pt} \huge\rule{10pt}{10pt}

数式クラス

KaTeXには、文字の種類に応じて自動で時間を調整する機能があります。

\sin x + xy \sin 2 x = (x)(y) \sin (x + x) + \sin(x)
\sin x + xy \sin 2 x = (x)(y) \sin (x + x) + \sin(x)

それぞれの文字は8つのクラスのいずれかに割り当てられています。以下の関数でクラスを指定できます。

関数 結果
\mathord 通常 a x ax
\mathop 単項演算子 \sin \lim a \sin x
\mathbin 二項演算子 + a + x
\mathrel 関係演算子 = a = x
\mathopen 開き括弧 ( \{ [ a (x)
\mathclose 閉じ括弧 ) \} ] (a) x
\mathpunct 句読点 \ldotp , a, x
\mathinner 内部要素 \ldots a \ldots x

立体で表記する単項演算子をひとつの関数で定義するために、\operatorname\operatorname*が使えます。これらは添字がつく位置に違いがあります。

関数 結果
\operatorname ローマン体単項演算子 \sin \log a \log x a \log_{10} (x)
\operatorname* ローマン体limit型単項演算子 \lim \max \lim\limits_{x \to a} x \max\limits_{x=a} x
\operatornamewithlimits 同上
\newcommand\Log{\operatorname{Log}}
\newcommand\esssup{\operatorname*{ess~sup}}
\Log_{a} x \\
\esssup_{x \in A} f(x) \\
\newcommand\Log{\operatorname{Log}} \newcommand\esssup{\operatorname*{ess~sup}} \Log_{a} x \\ \esssup_{x \in A} f(x) \\

\limits \nolimitsで添字の位置を個別に調整できます。

\sum\limits_{k=0}^n k \quad
\sum\nolimits_{k=0}^n k
\sum\limits_{k=0}^n k \quad \sum\nolimits_{k=0}^n k

各クラスの間の空白は以下の法則に従って決まります。

左側\右側 Ord Op Bin Rel Open Close Punct Inner
Ord 0 1 (2) (3) 0 0 0 (1)
Op 1 1 * (3) 0 0 0 (1)
Bin (2) (2) * * (2) * * (2)
Rel (3) (3) * 0 (3) 0 0 (3)
Open 0 0 * 0 0 0 0 0
Close 0 1 (2) (3) 0 0 0 (1)
Punct (1) (1) * (1) (1) (1) (1) (1)
Inner (1) 1 (2) (3) (1) 0 (1) (1)

表の0、1、2、3はそれぞれスペースなし、thinスペース、mediumスペース、thickスペースを表します。
括弧はディスプレイスタイルかテキストスタイルでのみスペースを挿入し、スクリプトスタイルやスクリプトスクリプトスタイルではスペースを挿入しません。
Bin要素の両側は二項演算の性質に対応した要素でなければならないため、*が適用されることはありません。
(The TEXbook p. 170 より)

rule

\rule{幅}{高さ}または\rule[底上げの量]{幅}{高さ}は塗りつぶした長方形です。

x\rule{3ex}{3ex}x \quad x\rule[6pt]{2ex}{1ex}x
x\rule{3ex}{3ex}x \quad x\rule[6pt]{2ex}{1ex}x

関連記事

https://zenn.dev/artakase/articles/katex-style-font

https://zenn.dev/artakase/articles/4961142a918d26

https://zenn.dev/artakase/articles/3d32a132fed178


ご清読ありがとうございました。

Discussion