LaTeX の ロゴ 命令 \TeX の中身は、T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@ という一行です。クヌースが plain.tex に書いた原型と比べると、LaTeX 版は末尾に \@ が一つ多いだけ——たったそれだけの差で、「〜で組んだ。次の文は」と書いたときの文末スペースが 1.11pt 広がります。ロゴ命令は飾りではなく、こういう細かい判断の集合体です。このページでは \TeX・\LaTeX・\LaTeXe の三つがどう組まれているか、\XeTeX や \BibTeX を出すには何が要るか、そして見出し・PDF のしおり・.bib というロゴが壊れる三つの場所でどう書けばよいかを、実際に組んで確かめた出力とともに見ていきます。
ロゴはどう組まれているか — カーンと持ち上げの中身
\TeX は「T」「下げた E」「X」の三つを負のカーンで引き寄せたものです。数字まで見ると設計の意図がわかります。T と E のあいだが −0.1667em(ちょうど 1/6 em、数式の細空きと同じ量)、E と X のあいだが −0.125em(1/8 em)、E の沈み込みが 0.5ex。ここで面白いのは、詰めているのに出来上がりが狭くならないことです。10pt の Computer Modern で幅を測ると、素直に打った「TeX」が 18.33334pt なのに対し \TeX は 18.6108pt——わずかに広い。E を下げたぶん隣り合う字形の食い込みが変わるからで、\TeX は「詰める命令」ではなく「形を作る命令」なのだとわかります。\LaTeX のほうははっきり詰まっていて、打った「LaTeX」の 29.58337pt に対し 25.66368pt、13% ほど狭くなります。
% The three logos LaTeX itself defines (latex.ltx, lines 7648-7661).
\DeclareRobustCommand\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
\DeclareRobustCommand{\LaTeX}{L\kern-.36em%
{\sbox\z@ T%
\vbox to\ht\z@{\hbox{...\fontsize\sf@size\z@ ... A}\vss}}%
\kern-.15em\TeX}
\DeclareRobustCommand{\LaTeXe}{\mbox{\m@th
\if b\expandafter\@car\f@series\@nil\boldmath\fi
\LaTeX\kern.15em2$_{\textstyle\varepsilon}$}}\LaTeX は同じ発想の延長で、\TeX の前に 小さな A を持ち上げて 置き、「La」を作ってから TeX ロゴにつなぎます。その A は独立した文字ではなく、T の高さちょうどの \vbox に、脚注サイズ(\sf@size)の A を上寄せで入れたもの——つまり「T の頭に A の頭を揃える」という指示です。L と A のあいだの −0.36em という深いカーンが、あの独特の食い込みを作っています。\LaTeXe はさらにその後ろに 2 と、数式の下付きに置いた \varepsilon を並べたもので、$_{\textstyle\varepsilon}$ という書き方をよく見ると ε が数式モードから来ていることがわかります。だから ε の形は本文書体ではなく数式書体に従います。太字の見出しに入れたときにロゴが太くなるのも、\LaTeXe が書体シリーズを見て \boldmath に切り替えているからです。
標準で使えるロゴは三つだけ — XeTeX や BibTeX は入っていない
素の LaTeX が定義しているロゴ命令は \TeX・\LaTeX・\LaTeXe の三つだけです。\XeTeX・\LuaTeX・\pdfTeX・\BibTeX・\ConTeXt はどれも標準に入っていません。そのまま書けば ! Undefined control sequence. が返ってくるので、パッケージを読み込む必要があります。ただし例外が二組あります。数式でよく使う amsmath を読み込むと \AmS が使えるようになり、\AmS-\LaTeX と書けば「AMS-LaTeX」のロゴになります。そして METAFONT と METAPOST は mflogo パッケージの \MF・\MP が定番です——これらは専用のロゴフォントで組まれるので、他の方法では正しい形になりません。
hologo と metalogo の違い — どちらを選ぶべきか
迷ったら hologo です。 決め手は「たくさん揃っているから」ではなく、PDF のしおりで壊れないから——理由は後の節で実測します。hologo(TeX Live 2024 同梱は v1.15、2021-11-16)は個別の命令を増やすのではなく、\hologo{XeTeX} のように ロゴ名を引数に渡す一つの命令にまとめた設計です。パッケージ自身の説明文にある通り、その売りは「しおり対応のロゴ集」であること。約 50 の名前を持ち、\hologo{pdfTeX}・\hologo{LuaTeX}・\hologo{BibTeX}・\hologo{ConTeXt}・\hologo{KOMAScript}・\hologo{LaTeX3}・\hologo{biber} などが引けます。文頭で先頭を大文字にしたいときは \Hologo{...} を使い、\Hologo{pdfLaTeX} は「PdfLaTeX」と組まれます。
注意すべきは知らない名前を渡すと通らないことです。日本語圏でよく使う \hologo{pTeX} や \hologo{pLaTeX} は、TeX Live 2024 同梱の hologo には登録されておらず、! Package hologo Error: Unknown logo というエラーになります。pTeX・upTeX・pLaTeX・upLaTeX を本文に書くときは、ロゴ命令を探すのをやめて素直に文字で書くのが実際的です。一方 metalogo(v0.12、2010 年)は逆の設計で、\XeTeX・\XeLaTeX・\LuaTeX・\LuaLaTeX を個別の命令として定義し、そのかわり \setlogokern{Te}{...} や \setlogodrop{...} で カーンと下げ幅をペア単位で調整できます。使用中のフォントに合わせてロゴの食い込みを詰め直したい——たとえば XeLaTeX でシステムフォントを使っていて \LaTeX の A の位置が気に入らない——という場合はこちらが唯一の道具です。なお hologo は \hologo と \Hologo しか公開しないので、metalogo と同時に読み込んでも命令名は衝突しません(TeX Live 2024 の pdfLaTeX・XeLaTeX 双方で確認)。それでも表記を揃えるため、一方に統一するのが無難です。
\usepackage{hologo} % \hologo{...} and \Hologo{...}
% \usepackage{metalogo} % \XeTeX, \LuaTeX + \setlogokern for fine tuning
% \usepackage{mflogo} % \MF and \MP
\hologo{pdfTeX}, \hologo{XeTeX} and \hologo{LuaTeX} succeed \hologo{TeX}.
\hologo{BibTeX} builds the bibliography; \hologo{ConTeXt} is a rival format.
\Hologo{pdfLaTeX} starts a sentence with a capital.
% \hologo{pTeX} is NOT defined: "Unknown logo" error. Type pTeX instead.| 命令 | 出力 | 必要なパッケージ |
|---|---|---|
\TeX | TeX(E が 0.5ex 下がる) | 標準(不要) |
\LaTeX | LaTeX(小さい A が T の高さに揃う) | 標準(不要) |
\LaTeXe | LaTeX2ε(ε は数式の下付き。数式書体に従う) | 標準(不要) |
\AmS | AMS。\AmS-\LaTeX で AMS-LaTeX になる | amsmath / amstex |
\hologo{XeTeX} | XeTeX(反転した E)。しおりでも安全 | hologo |
\hologo{BibTeX} | BibTeX。\hologo{biber} や \hologo{BibTeX8} もある | hologo |
\hologo{ConTeXt} | ConTeXt。\hologo{LuaTeX}・\hologo{pdfTeX}・\hologo{KOMAScript} も同様に引ける | hologo |
\XeTeX | XeTeX。\setlogokern で微調整できるが、しおりでは壊れる | metalogo |
\LuaLaTeX | LuaLaTeX。\XeLaTeX・\LuaTeX も同じパッケージ | metalogo |
\MF / \MP | METAFONT / METAPOST。専用のロゴフォントで組まれる | mflogo |
XeTeX ロゴの反転した E は何でできているか
答えは エンジンによって違います。hologo も metalogo も、まず「いま使っているフォントに U+018E(ラテン大文字の反転 E、Ǝ)があるか」を尋ね、あればその字を素直に使い、なければ graphicx の \reflectbox で E を鏡像にします。だから同じソースでも中身が変わります。TeX Live 2024 で \hologo{XeTeX} だけの文書を組み、出来た PDF から pdftotext でテキストを抜き出すと——XeLaTeX で組んだ場合は XƎTEX、pdfLaTeX で組んだ場合は XETEX。前者は本物の Ǝ が文字として入っているのでコピーしても Ǝ のまま、後者は「左右反転して置かれた E」なので、テキスト層には普通の E しか残りません。見た目は同じでも、検索やコピーの結果が違うわけです。
では、その \reflectbox も無い環境ではどうなるのか。hologo は諦めずに graphicx → pgf → pstricks → 自前のドライバ固有コードの順に代替手段を探します。それでも見つからなければ、needs driver specific macros, but driver ... is not supported という警告を出したうえで、普通の e を組んで先へ進みます。つまり「XeTeX」とだけ出て文書は完成する——エラーで止まらないぶん、気づきにくい壊れ方です。通常の pdfLaTeX や XeLaTeX ではこの経路には落ちないので心配は要りませんが、風変わりなドライバを使っているのにロゴが平凡に見えるときは、ログのこの警告を疑ってください。
見出し・PDF のしおり・.bib — ロゴが壊れる三つの場所
見出しは大丈夫、しおりはパッケージ次第、.bib は要注意——これが結論です。まず見出し。\TeX や \LaTeX は \DeclareRobustCommand で定義されているので、目次や柱に書き出されても壊れません(かつて可動引数で事故が起きたのはこの保護が無かった時代の話です)。問題はしおりのほうです。hyperref は PDF のしおり文字列を作るとき、組版命令をすべて捨てなければなりません。TeX Live 2024 で \section{Using \XeTeX{} today}(metalogo)を組むと、ログに Package hyperref Warning: Token not allowed in a PDF string (Unicode): removing \reflectbox on input line 5. が何度も並び、出来上がったしおりは 「Using X0.5ex0.5exE0.5exTeX today」——寸法の指定がそのまま文字列に漏れています。同じ見出しを \hologo{XeTeX} で書くと警告はゼロ、しおりは 「Using XeTeX today」。hologo が PDF 用の別表現を持っているからで、これが「迷ったら hologo」の理由です。
.bib はまた別の壊れ方をします。BibTeX の多くのスタイルは表題の大文字小文字を整形し直すため、波括弧で守られていない文字を機械的に小文字化します。ロゴ命令もその対象です。title = {Typesetting With \LaTeX and \TeX} と書いて plain.bst にかけると、生成された .bbl には Typesetting with \latex and \tex. と入り、次の組版で ! Undefined control sequence. が出て止まります。対策は簡単で、ロゴ命令を波括弧で包むだけ——title = {Typesetting With {\LaTeX} and {\TeX}} とすれば .bbl にもそのまま残ります。頭字語({DNA} など)を守るのと同じ習慣です。もう一つ、ロゴを使ってはいけない場所も覚えておいてください。ファイル名、URL、\verb の中、pdftitle などの PDF メタデータ、そしてコマンドラインの説明——ここでは飾りのないただの「LaTeX」が正しく、ロゴ命令は無意味か有害です。
% Wrong: plain.bst lower-cases it to \latex, then LaTeX stops with
% ! Undefined control sequence.
title = {Typesetting With \LaTeX and \TeX}
% Right: braces protect the command from BibTeX case changing
title = {Typesetting With {\LaTeX} and {\TeX}}空白を食う問題 — LaTeX is が LATEXis になる
\LaTeX is great. と書くと出力は LATEXis great.——ロゴと次の語がくっつきます(TeX Live 2024 で組んだ PDF から pdftotext で抜いた実際の文字列です)。原因はロゴ命令に固有のものではなく、英字だけで綴られた命令は、名前の終わりを示す空白を吸収するという TeX の字句解析の規則そのものです(なぜそうなっているかは文法の基本ページが扱います)。対処は二つ。命令の直後に 空の波括弧 {} を置くか、バックスラッシュ+空白 \ (制御綴の空白)を入れるかです。どちらでも出力は LATEX is great. になります。直後がカンマやピリオドなら食われる空白がそもそも無いので、\LaTeX, \TeX. はそのままで構いません。xspace パッケージで自動的に補う流儀もありますが、例外の判定を外す場面があるので、まずは {} か \ で明示するのが堅実です。
% Bad: the space is eaten, giving "LATEXis great."
\LaTeX is great.
% Good: empty braces end the command name
\LaTeX{} is great.
% Good: a control space
\LaTeX\ is great.
% No space to eat before punctuation, so this needs nothing
\LaTeX, \TeX.
% In maths, step back into text mode first
$x = \text{\LaTeX}$最後にもう一点、ロゴ命令はテキストモードのものだということ。\TeX は \lower と \hbox で組み立てられているので、数式モード($...$)の中にそのまま置くのは筋が悪く、$x = \text{\LaTeX}$ のように amsmath の \text{} でいったんテキストへ戻してから書きます。\LaTeXe にいたっては定義そのものが \mbox で包まれており、内部で数式モードへ入って ε を下付きにしています。ロゴ命令を「文字列」だと思っているうちは驚く挙動も、持ち上げ下げした箱(利用者側の同等物は \raisebox)とカーンと数式下付きの組み合わせだと知っていれば、どこで壊れるか予想できるようになります。