「TeX言語🤮の全キーワードまとめ」というネタを思いついてしまったという深刻な問題を無事解決して安心して某キ~タを眺めていたら、また新たな問題が発生してしまいました😟
問題が解決したと思ってまた某キ~タを眺めてたら、
— 某ZR(ざんねん🙃) (@zr_tex8r) 2025年5月9日
今度はこんな記事を見つけてしまった(ざんねん🙃)
これで完璧!Goの演算子と区切り記号を網羅するまとめ ― Qiita (by urakawa_jinsei)https://t.co/UP5VKRgVAk#TeX #TeX言語 #Go以外#TeX言語GW特別キャンペーン☘️
しょうがないので、また記事を書くことにしました。
TeX言語において演算子・区切り記号とは何か
TeX言語における「演算子・区切り記号」と聞くと、{ } $ ^のようないわゆる“特殊文字”を思い浮かべる人もいるかもしれません。しかしよく知られているように、TeX言語の“特殊文字”は文字のカテゴリコードによって決定され、これはユーザが自由に設定できます。つまり“特殊文字”の機能は「特定の記号と不可分に結びついている」わけではありません。元ネタの記事の趣旨に合わせて、本記事では「プリミティブの構文の中で固定して現れる記号」に的を絞って解説します。
演算子・区切り記号に関する構文規則
キーワードの時と同様に、TeX言語の演算子・区切り記号は「プリミティブの構文の中でそれが出現する(可能性のある)位置」で出現した場合にのみ当該の働きをします。(それ以外の位置では恐らく版面にそのまま出力される。)
その他に、演算子・区切り記号には以下のような規則があります。
% カテゴリコード12の"<"は演算子になる \message{\ifnum 1<2 YES\else NO\fi} %==>"YES" % カテゴリコード11の"<"は演算子にならない \catcode`\<=11 \message{\ifnum 1<2 YES\else NO\fi} %==> エラー " Missing = inserted for \ifnum"
一覧表
元祖TeXの範囲での演算子・区切り記号の一覧は以下の通りです。
| 単語 | 説明 | 使用例 |
|---|---|---|
" | 整数表記:16進法表記 | "2A |
' | 整数表記:8進法表記 | '052 |
+ | 符号:正数 | +10000 |
, | 小数表記:小数点 | 29,7cm |
- | 符号:負数 | -1000pt |
. | 小数表記:小数点 | 11.5in |
< | 演算子:小なり | \ifnum \month<8 … |
= | ①演算子:等しい ②代入 |
①\ifnum \month=8 …② \catcode64=11 |
> | 演算子:大なり | \ifnum \month>8 … |
` | 整数表記:文字コード値 | `* |
詳細
以下では、演算子・区切り符号のそれぞれについてその用途と構文を解説していきます。
構文説明の中では以下の記法を用います。
[A]は「Aが省略可能である」ことを表します。[ ]自体は書きません。(A | B)は「AまたはB」を表します。A…は「Aを1個以上並べる」ことを表します。
また、使用例のコードの動作は「plain TeXで@のカテゴリコードが11の状態」を仮定します。
"(quotation mark)
説明
整数表記において整数が16進法表記であることを示します。
% 以下のものは整数表記となる
"«16進数字»…
使用例
% これは64206になる \count@="FACE % -10が代入され, "a"が出力される \count@=-"0Aa % これは "DD dd と解釈されるので, % 221dd(=236.47191pt)が代入され, "D"が1個出力される. \dimen@ = "DDdDD % 数字がないとエラー \count@="\relax %==>エラー "Missing number, treated as zero"
'(apostrophe)
説明
整数表記において整数が8進法表記であることを示します。
% 以下のものは整数表記となる
'«8進数字»…
使用例
% これは52になる \count@='064 % -10が代入され, "8"が出力される \count@=-'128 % 数字がないとエラー \dimen@='pt %==>エラー "Missing number, treated as zero"
+(plus sign)
説明
整数や寸法の前に置いて、正符号を表します。
% 以下のものは符号となる
( + | - )
使用例
\count@ = +1 % これは1になる \count@ = + ++ + 1 % "1cm plus 1fil"と書いたのと等価 \skip@ = +1cm plus +1fil
,(comma)
説明
小数表記の中で、小数点を表します。一部の地域では小数点として「.」ではなく「,」を用いていて、TeX言語ではこれに対応するため小数点として.と,の両方をサポートしています2。
% 以下のものは小数表記となる % ※空白は実際には入れない [ «数字»… ] , [ «数字»… ]
使用例
% "1.5em"と書いたのと等価 \parindent = 1,5em
-(hyphen-minus)
説明
整数や寸法の前に置いて、負符号を表します。
% 以下のものは符号となる
( + | - )
使用例
% これは-1になる \count@ = -1 % 符号が3回反転するので-1になる \count@ = - +- - 1 % 伸縮値を負にできる \skip@ = -12pt minus -6pt
※負の伸縮値をもつグルーは奇妙な動作を引き起こすので普通は使われません。ただし負の伸縮値のグルー値は「他のグルー値と加算することで伸縮値を変化させる」などの使い方があります3。
.(full stop)
説明
小数表記の中で、小数点を表します。
% 以下のものは小数表記となる % ※空白は実際には入れない [ «数字»… ] . [ «数字»… ]
※ ,の項も参照してください。
\parindent = 2.0em % これは5ptになる \dimen@ = 5.pt % これは0.5ptになる \dimen@ = .5pt % これは0ptになる \dimen@ = .pt
<(less-than sign)
説明
\ifnum・\ifdimの後に続く値比較の記述において、「左辺が右辺より小さい」という条件を表します。
% 以下のものは条件記述となる \ifnum «整数» < «整数» \ifdim «寸法» < «寸法»
使用例
% \topskip は丁度10ptなので偽 \message{\ifdim \topskip < 10pt YES\else NO\fi} %==>"NO"
=(equal sign)
説明(比較演算子)
\ifnum・\ifdimの後に続く値比較の記述において、「左辺が右辺と等しい」という条件を表します。
% 以下のものは条件記述となる \ifnum «整数» = «整数» \ifdim «寸法» = «寸法»
説明(代入)
ある種の代入文において、代入先のものと代入される値の間に置かれます。
«変数» [=] «値» «toks変数» [=] { «トークン»… } \let \制御綴 [=] «トークン» \setbox «整数» [=] «ボックス記述» \font \制御綴 [=] «TFM名» [ at «寸法» ] [ scaled «整数» ] ( \chardef | \mathchardef ) \制御綴 [=] «整数» ( \countdef | \dimendef | \skipdef | \muskipdef | \toksdef ) \制御綴 [=] «整数» ( \textfont | \scriptfont | \scriptscriptfont ) «整数» [=] «フォント» \parshape [=] «整数» «寸法»…
※«変数»とは整数・寸法・グルー値・数式グルー値・トークン列を値にもつパラメタ(\parindent等)やレジスタ(\skip2等)のことを指し、引数をとるパラメタ(\catcode64や\wd255等)も含みます。
何れの場合も、代入文の=は省略可能です。
使用例
% どちらも7なので真 \message{\ifnum ++007 = --'007 YES\else NO\fi} %==>"YES" % どちらも0ptなので真 \message{\ifdim .in = ,cm YES\else NO\fi} %==>"YES" % \parfillskip は0pt plus 1filであるが, \ifdim で比較するために % 寸法値にキャストされて自然長の0ptが残る. \message{\ifdim \parfillskip = 0pt YES\else NO\fi} %==>"YES" % いろいろな代入文 \month=8 \lccode`\* = `\~ \toks4 = \toks2 \everypar={\P} \let \ifTeX = \iffalse \setbox2 = \hbox{\TeX} \setbox4 = \copy2 \font\fA=cmr10 \dimendef\dB=255 \textfont4 = \fA \parshape = 2 0pt 10em 4em 10em
>(greater-than sign)
説明
\ifnum・\ifdimの後に続く値比較の記述において、「左辺が右辺より大きい」という条件を表します。
% 以下のものは条件記述となる \ifnum «整数» > «整数» \ifdim «寸法» > «寸法»
使用例
% 1977年にはTeXは存在しない🙃 \message{\ifnum \year > 1977 YES\else NO\fi} %==>"YES"
`(grave accent)
説明
整数表記において整数が文字コード値表記であることを示します。
% 以下のものは整数表記となる
(`«文字トークン» | `\制御綴)
制御綴は「名前が1文字である」ものに限ります。文字トークンの場合はその文字、制御綴の場合はその名前の文字の、文字コードの整数値を表します。
使用例
% "Z"の文字コードの90になる \count@=`Z % "%"の文字コードの37になる. % もし"\"がないと"%"は通常通りコメントを開始してしまう. \count@=`\% % "~"の文字コードの126. "~"の展開は抑止される. \count@=`~ % "c"の文字コードの99. "\c"の展開は抑止される. \count@=`\c
まとめ
というわけで、TeX言語GW特別キャンペーン☘️も今日でおしまいです。皆さんのTeX言語活動の進捗が満足のいくものであったことを願います😃
- 演算子・区切り記号の位置に展開可能なアクティブ文字トークンがある場合はそれは展開されます。↩
-
ただしLaTeXのパッケージでは小数点として
,が使われることを想定していない場合が多いと思われます。↩ -
負の伸縮値のグルー値を利用する有名な例としてLaTeXカーネルの内部マクロの
\@startsectionがあります。このマクロの第4引数にはグルー値を指定しますが、この値は実際には2つの設定を担っていて「値(自然長)が正負のどちらか」のフラグと「値の絶対値」が別の意味をもっています。前者のフラグを「負」にしようとすると、後者のグルー値の符号を反転した値を指定する必要があり、この場合は負の伸縮値をもつグルー値を指定することになります。しかし実際に使われるグルー値は絶対値なので負の伸縮値をもつグルーは使われません。なお、\@startsectionマクロの第5引数も同じ性質をもちます。↩