Logos (\TeX, etc.)

Le corps de la commande de logo \TeX de LaTeX tient en une ligne : T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@. Placez-la à côté de l’original écrit par Knuth dans plain.tex : la version LaTeX comporte exactement un token de plus à la fin, \@ — et ce seul token élargit de 1,11pt l’espace après « …composé en TeX. La phrase suivante ». Les commandes de logo ne sont pas un ornement mais une accumulation de décisions minuscules comme celle-ci. Cette page examine comment \TeX, \LaTeX et \LaTeXe sont réellement construits, ce qu’il faut pour obtenir \XeTeX ou \BibTeX, et quoi écrire aux trois endroits où les logos cassent : titres, signets PDF et fichiers .bib — avec, à chaque fois, la sortie réellement obtenue.

Comment les logos sont construits : kerns, E abaissé, A relevé

\TeX est un « T », un « E » abaissé et un « X » rapprochés par des kerns négatifs, et les chiffres trahissent l’intention. Entre le T et le E, −0,1667em — exactement un sixième de cadratin, soit l’équivalent d’une espace fine en mathématiques —, entre le E et le X, −0,125em (un huitième de cadratin), et le E descend de 0,5ex. Le point curieux : tout ce resserrement ne rétrécit pas le résultat. Mesuré en Computer Modern 10pt, un « TeX » tapé simplement fait 18,33334pt, alors que \TeX donne 18,6108pt — très légèrement plus large. Abaisser le E change la façon dont les formes voisines s’emboîtent : \TeX est donc une commande qui fabrique une forme, non qui économise de la place. \LaTeX, en revanche, resserre pour de bon : 25,66368pt contre 29,58337pt pour un « LaTeX » tapé, soit environ 13 % de moins.

latex.ltx
% 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 prolonge la même idée : avant \TeX, il place un petit A relevé pour former « La », puis enchaîne sur le logo TeX. Ce A n’est pas un caractère distinct mais un A en corps de note (\sf@size) calé en haut d’une \vbox exactement aussi haute qu’un T — autrement dit, une consigne d’aligner le sommet du A sur celui du T. Le kern profond de −0,36em entre le L et le A produit ce chevauchement caractéristique. \LaTeXe ajoute ensuite un 2 et un \varepsilon composé en indice mathématique ; à regarder de près $_{\textstyle\varepsilon}$, l’epsilon vient du mode mathématique, et sa forme suit donc la fonte mathématique et non celle du texte. Et si le logo passe en gras dans un titre en gras, c’est que \LaTeXe examine la série de la fonte et bascule sur \boldmath.

Seuls trois logos viennent avec LaTeX : ni XeTeX ni BibTeX

LaTeX nu définit exactement trois commandes de logo : \TeX, \LaTeX et \LaTeXe. \XeTeX, \LuaTeX, \pdfTeX, \BibTeX et \ConTeXt n’en font pas partie. Les écrire tels quels donne ! Undefined control sequence. : il faut donc charger un package. Deux exceptions méritent d’être connues. Charger amsmath, que la plupart des documents mathématiques chargent de toute façon, apporte \AmS, et \AmS-\LaTeX produit le logotype « AMS-LaTeX ». Quant à METAFONT et METAPOST, la réponse standard est \MF et \MP du package mflogo — ils sont composés dans une fonte de logos dédiée, si bien qu’aucune autre voie ne donne les formes correctes.

Dans le doute, prenez hologo — et la raison décisive n’est pas l’ampleur de la collection, mais le fait qu’il ne casse pas dans les signets PDF, ce qu’une section ultérieure mesure. hologo (v1.15, datée du 16/11/2021, dans TeX Live 2024) n’ajoute pas une nuée de commandes individuelles : il ramène tout à une seule commande qui prend le nom du logo en argument, comme \hologo{XeTeX}. Sa propre ligne de description le présente comme une collection de logos avec prise en charge des signets, et c’est bien là l’essentiel. Il connaît une cinquantaine de noms, si bien que \hologo{pdfTeX}, \hologo{LuaTeX}, \hologo{BibTeX}, \hologo{ConTeXt}, \hologo{KOMAScript}, \hologo{LaTeX3} et \hologo{biber} fonctionnent tous. Pour une capitale en début de phrase, on emploie \Hologo{...} ; \Hologo{pdfLaTeX} compose « PdfLaTeX ».

Le piège : un nom inconnu échoue purement et simplement. \hologo{pTeX} et \hologo{pLaTeX}, familiers dans l’univers japonais, ne sont pas enregistrés dans le hologo livré avec TeX Live 2024 et produisent l’erreur ! Package hologo Error: Unknown logo. Lorsque pTeX, upTeX, pLaTeX ou upLaTeX apparaissent dans le texte, le geste pratique est de renoncer à chercher une commande de logo et de taper les lettres. metalogo (v0.12, de 2010) suit la voie inverse : il définit \XeTeX, \XeLaTeX, \LuaTeX et \LuaLaTeX comme commandes distinctes et permet en échange d’ajuster kerns et abaissements paire par paire avec \setlogokern{Te}{...} et \setlogodrop{...}. S’il faut réajuster un logo à la fonte employée — sous XeLaTeX avec une fonte système, par exemple, quand le A de \LaTeX tombe mal —, c’est le seul outil pour cela. Notez que hologo n’expose que \hologo et \Hologo : le charger à côté de metalogo ne provoque donc aucun conflit de noms (vérifié sous pdfLaTeX comme sous XeLaTeX de TeX Live 2024). Il reste préférable de s’en tenir à un seul pour garder une présentation homogène.

latex
\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.
CommandeRenduPackage requis
\TeXTeX, le E abaissé de 0,5exLaTeX de base (aucun)
\LaTeXLaTeX, le petit A aligné sur le haut du TLaTeX de base (aucun)
\LaTeXeLaTeX2ε ; l’ε est un indice mathématique et suit la fonte mathématiqueLaTeX de base (aucun)
\AmSAMS ; \AmS-\LaTeX donne AMS-LaTeXamsmath / amstex
\hologo{XeTeX}XeTeX avec son E inversé ; sûr aussi dans les signetshologo
\hologo{BibTeX}BibTeX ; \hologo{biber} et \hologo{BibTeX8} existent aussihologo
\hologo{ConTeXt}ConTeXt ; \hologo{LuaTeX}, \hologo{pdfTeX} et \hologo{KOMAScript} s’obtiennent de mêmehologo
\XeTeXXeTeX, réglable avec \setlogokern — mais il casse dans les signetsmetalogo
\LuaLaTeXLuaLaTeX ; \XeLaTeX et \LuaTeX viennent du même packagemetalogo
\MF / \MPMETAFONT / METAPOST, composés dans une fonte de logos dédiéemflogo

De quoi est réellement fait le E inversé du logo XeTeX

La réponse dépend du moteur. hologo comme metalogo demandent d’abord si la fonte courante possède U+018E (LATIN CAPITAL LETTER REVERSED E, Ǝ) ; si oui, ils emploient ce caractère tel quel, sinon ils retournent un E ordinaire avec \reflectbox de graphicx. Une même source produit donc une substance différente. Composez sous TeX Live 2024 un document ne contenant que \hologo{XeTeX} et extrayez le texte du PDF obtenu avec pdftotext : sous XeLaTeX vous obtenez XƎTEX, sous pdfLaTeX XETEX. Dans le premier cas, un véritable Ǝ est présent comme caractère et survit au copier-coller ; dans le second, il n’y a qu’un E placé en miroir, si bien que la couche de texte ne contient qu’un E ordinaire. Identiques à l’œil, différents à la recherche et à la copie.

Et si \reflectbox fait défaut à son tour ? hologo n’abandonne pas : il cherche un substitut dans l’ordre graphicxpgfpstricks → son propre code spécifique au pilote. Si rien ne se présente, il émet un avertissement indiquant que le logo needs driver specific macros, but driver ... is not supported, puis compose un e ordinaire et poursuit. La page affiche alors simplement « XeTeX » et le document s’achève — une panne d’autant plus facile à manquer que rien ne s’arrête. pdfLaTeX et XeLaTeX classiques n’empruntent jamais ce chemin ; mais si vous utilisez un pilote inhabituel et que le logo paraît étrangement banal, cherchez cet avertissement dans le journal.

Titres, signets PDF et .bib : les trois endroits où les logos cassent

Les titres passent, les signets dépendent du package, et les .bib demandent de l’attention — voilà la conclusion. D’abord les titres : \TeX et \LaTeX sont définis avec \DeclareRobustCommand et survivent donc à leur écriture dans une table des matières ou un titre courant. (Les vieilles histoires d’arguments mobiles datent d’avant cette protection.) C’est aux signets que cela se gâte. Quand hyperref fabrique la chaîne d’un signet PDF, il doit jeter toute commande de composition. Sous TeX Live 2024, \section{Using \XeTeX{} today} avec metalogo remplit le journal de Package hyperref Warning: Token not allowed in a PDF string (Unicode): removing \reflectbox on input line 5., et le signet obtenu affiche « Using X0.5ex0.5exE0.5exTeX today » — les cotes ont fui directement dans la chaîne. Écrivez le même titre avec \hologo{XeTeX} et il n’y a aucun avertissement ; le signet affiche « Using XeTeX today ». hologo embarque pour chaque logo une forme distincte destinée aux chaînes PDF : c’est la raison du « dans le doute, hologo ».

Un fichier .bib casse autrement. Beaucoup de styles BibTeX reformatent la casse des titres, c’est-à-dire qu’ils mettent mécaniquement en bas de casse tout ce que des accolades ne protègent pas — commandes de logo comprises. Écrivez title = {Typesetting With \LaTeX and \TeX}, passez-le à plain.bst, et le .bbl engendré contient Typesetting with \latex and \tex. ; la compilation suivante s’arrête sur ! Undefined control sequence. Le remède est trivial : entourer la commande de logo d’accolades. title = {Typesetting With {\LaTeX} and {\TeX}} traverse le .bbl intact. C’est la même habitude que protéger un acronyme comme {DNA}. Retenez enfin les endroits où un logo est tout simplement déplacé : noms de fichiers, URL, intérieur de \verb, métadonnées PDF telles que pdftitle, et toute description de ligne de commande. Là, le mot « LaTeX » sans ornement est correct, et une commande de logo est inutile, voire nuisible.

refs.bib
% 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}}

L’espace avalée : pourquoi « LaTeX is » s’imprime « LATEXis »

Écrivez \LaTeX is great. et la sortie donne LATEXis great. — le logo collé au mot suivant. (C’est la chaîne réellement extraite avec pdftotext d’un PDF composé sous TeX Live 2024.) La cause n’a rien de propre aux logos : c’est la règle de découpage en tokens de TeX, selon laquelle une commande formée de lettres absorbe l’espace qui marque la fin de son nom. La raison d’être de cette règle relève de la page consacrée à la syntaxe de base. Deux remèdes : placer des accolades vides {} juste après la commande, ou insérer un antislash-espace \ (une espace de contrôle). Dans les deux cas, la sortie devient LATEX is great. Si une virgule ou un point suit, il n’y a de toute façon pas d’espace à avaler : \LaTeX, \TeX. n’a besoin de rien. Certains laissent le package xspace rétablir l’espace automatiquement, mais il se trompe dans certains cas ; être explicite d’abord avec {} ou \ reste l’habitude fiable.

latex
% 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}$

Un dernier point : les commandes de logo relèvent du mode texte. \TeX est assemblé à partir de \lower et de \hbox ; le glisser tel quel en mode mathématique ($...$) est donc hasardeux. Il faut d’abord revenir au texte avec le \text{} d’amsmath, comme dans $x = \text{\LaTeX}$. \LaTeXe va plus loin encore : sa définition est enveloppée dans une \mbox et passe en interne en mode mathématique pour mettre l’epsilon en indice. Un comportement déroutant tant qu’on prend une commande de logo pour une chaîne de caractères devient prévisible dès qu’on la sait faite de boîtes relevées ou abaissées (l’équivalent utilisateur est \raisebox), de kerns et d’un indice mathématique : on devine alors à l’avance où elle cassera.