pdfTeX

pdfTeX est le moteur TeX qui produit PDF directement, sans étape DVI entre les deux. C'est ce que pdflatex exécute réellement et, depuis des années, le moteur TeX le plus utilisé au monde. Sa caractéristique caractéristique est la *micro-typographie* : le crénage des marges, qui permet aux caractères situés aux bords d'une ligne de dépasser légèrement du bloc de texte, et l'expansion des polices, qui étend ou réduit la largeur des glyphes presque imperceptiblement. C’est ce qui rend pdfTeX spécial sur l’axe de la qualité typographique.

Qu'est-ce que pdfTeX

Le TeX original de Knuth n'émet qu'un format intermédiaire appelé DVI (indépendant de l'appareil), qu'un programme distinct convertit ensuite en PostScript ou PDF. pdfTeX supprime une étape de ce pipeline et génère PDF directement à partir du générateur de pages de TeX. Il a été écrit à la fin des années 1990 par Hàn Thế Thành, originaire du Vietnam, dans le cadre de son doctorat à l'Université Masaryk en République tchèque. La première sortie publique remonte à 1996.

L'essentiel à garder à l'esprit est que pdfTeX est un moteur, pas un format. Le moteur est l'exécutable qui effectue le travail ; le format est le système de commandes (LaTeX, Plain TeX). Le moteur pdfTeX exécutant le format LaTeX vous donne pdfLaTeX (la commande pdflatex) ; exécuter Plain TeX vous donne pdftex. Lorsque vous dites que vous « écrivez en pdfLaTeX », pdfTeX est le moteur en dessous.

pdfTeX intègre les extensions e-TeX. e-TeX est un ensemble d'ajouts à la machinerie macro de TeX - \protected, \unexpanded, plus de registres, prise en charge de la composition de droite à gauche, et plus encore - que le LaTeX moderne prend pour acquis. Historiquement, le pdfTeX compatible e-TeX était livré sous le nom de pdfetex et est devenu le moteur par défaut à partir de TeX Live 2004. Vous pouvez en toute sécurité considérer le pdflatex d'aujourd'hui comme pdfTeX-with-e-TeX.

sortie PDF, ou toujours DVI

Par défaut, il produit directement PDF, mais pdfTeX peut toujours émettre DVI. Le commutateur est le paramètre entier \pdfoutput : définissez \pdfoutput=1 (n'importe quelle valeur positive) pour PDF, ou \pdfoutput=0 pour revenir au DVI classique. Le DVI produit avec le \pdfoutput=0 est, en principe, identique à ce qu'aurait émis le TeX original.

Cette valeur doit être corrigée avant l'expédition de la première page, et vous ne pouvez pas basculer entre PDF et DVI au milieu du document. Dans LaTeX, la détection des packages et des pilotes se produit souvent très tôt, donc l'endroit sûr et pratique est tout en haut, avant \documentclass. Certains packages qui s'appuient sur les offres spéciales de PostScript, tels que PSTricks, ont parfois besoin de la route DVI→PS→PDF, et c'est là que \pdfoutput=0 gagne sa place.

latex
% Force DVI output even when run via pdflatex
\pdfoutput=0
\documentclass{article}
\begin{document}
This run produces a .dvi file, not a .pdf.
\end{document}

Micro-typographie

Aucun récit de pdfTeX n'est complet sans micro-typographie. C'était le sujet même de la thèse de doctorat de Hàn Thế Thành, *Extensions micro-typographiques du système de composition TeX*, soutenue à la Faculté d'informatique de l'Université de Masaryk en octobre 2000 sous Jiří Zlatuška — un ensemble d'ajustements subtils, intégrés dans l'algorithme de saut de ligne de TeX, qui lissent les bords du bloc de texte et l'égalisent. l'espacement à l'intérieur d'une ligne. L'idée remonte au programme hz développé par Hermann Zapf et Peter Karow.

Le premier est la protrusion des caractères, également appelée crénage des marges. En laissant les points, les virgules, les tirets et les signes de ponctuation dépasser légèrement du bord du bloc de texte, une marge qui semble irrégulière sous une justification purement mécanique apparaît optiquement droite. Il s'agit d'une généralisation de l'ancienne pratique de la ponctuation suspendue.

Le second est l'expansion des polices, l'algorithme Hz. En utilisant des formes de glyphes étirées ou réduites horizontalement d'une quantité imperceptiblement petite, l'espacement entre les mots peut être rendu plus uniforme. pdfTeX intègre cette marge de flexibilité dans la décision de rupture de ligne elle-même, en choisissant de meilleurs points d'arrêt. Le résultat est moins de lignes avec des espaces de mots béants (les soi-disant « rivières ») et une texture globale plus uniforme du paragraphe.

Ceux-ci peuvent être pilotés avec des primitives brutes. La protrusion utilise \pdfprotrudechars (0 = désactivé, 1 = activé, 2 = également reflété dans les calculs de largeur) ainsi que \lpcode (bord gauche) et \rpcode (bord droit), qui définissent le montant par caractère. L'expansion des polices utilise \pdfadjustspacing (=2 intègre l'étirement dans le saut de ligne) ainsi que \efcode, qui définit la volonté de chaque caractère de s'étirer. En pratique, on ne les touche presque jamais directement.

Dans les documents réels, vous chargez simplement le package microtype, qui enveloppe tout cela et sélectionne les valeurs par défaut raisonnables pour vous. Une seule ligne — \usepackage{microtype} — active la saillie et l'expansion des polices avec de bons paramètres.

latex
\documentclass{article}
\usepackage{microtype} % protrusion + expansion, sensible defaults
\begin{document}
With microtype loaded, pdfTeX nudges punctuation into the
margins and flexes glyph widths a hair, so justified text
looks noticeably more even.
\end{document}

Fonctionnalités de PDF et inclusion d'images

Parce qu'il construit directement PDF, pdfTeX expose des primitives qui atteignent les fonctionnalités de PDF. Les titres principaux sont \pdfliteral, qui injecte des opérateurs de dessin bruts PDF ; \pdfobj, qui crée directement un objet PDF ; et \pdfannot, qui place une annotation (un lien, un champ de formulaire, etc.). Les hyperliens et les signets sont construits sur ces mécanismes par le package hyperref.

Pour les paramètres à l'échelle du document, il existe \pdfinfo, qui écrit des métadonnées telles que le titre et l'auteur ; \pdfcompresslevel, qui définit la force avec laquelle la sortie PDF est compressée ; et \pdfpageattr, qui attache des attributs à chaque page.

latex
\pdfinfo{
  /Title (My Report)
  /Author (A. Author)
}
\pdfcompresslevel=9
% draw a thin rule with a raw PDF operator
\pdfliteral{0 0 m 100 0 l 0.4 w S}

Les images fonctionnent également directement. L'un des points forts de pdfTeX est qu'il peut inclure PNG, JPEG et PDF sans conversion intermédiaire (EPS, en revanche, doit d'abord être converti en PDF) ; au niveau bas, \pdfximage lit une image. Normalement, cependant, vous utilisez simplement \includegraphics du package graphicx, qui appelle les bonnes primitives pour vous.

PrimitifCe que ça fait
\pdfliteralInsérer des opérateurs de dessin PDF bruts
\pdfobj / \pdfannotCréer directement un objet/annotation PDF
\pdfinfoÉcrire les métadonnées (titre, auteur, …)
\pdfcompresslevelNiveau de compression de sortie PDF (0–9)
\pdfximageInclure une image PNG / JPEG / PDF
\pdfpageattrAttachez les attributs PDF à chaque page

Limites et quand changer

Malgré toute sa puissance, pdfTeX comporte des contraintes qui semblent démodées aujourd'hui. Le plus important est qu'il s'agit d'un moteur 8 bits. Il n'a pas de machine intégrée pour prendre Unicode comme entrée comme le font XeTeX et LuaTeX, et il n'est pas conçu pour composer, par exemple, le japonais UTF-8 directement (pour le texte occidental, cela a été corrigé avec inputenc/fontenc).

La gestion des polices est également limitée. Les métriques dépendent des fichiers TFM (TeX Font Metric), et les glyphes réels sont intégrés à partir des polices Type1 ou TrueType via des fichiers de carte. Vous ne pouvez pas simplement nommer une police OpenType installée sur le système d'exploitation et la faire utiliser. Et il n'existe pas de langage de script intégré tel que Lua pour exécuter des programmes pendant la composition.

C'est exactement pourquoi le désir d'utiliser des polices système ou de composer de nombreuses langues dans Unicode pousse les gens vers XeTeX ou LuaTeX. Si vous repartez à zéro – et en particulier pour le japonais – ces moteurs (upLaTeX ou LuaLaTeX pour le japonais) sont le choix pratique.

pdfTeX lui-même est désormais dans un mode maintenance stable, plus ou moins gelé. Les corrections de bugs se poursuivent, mais les nouveaux développements ont été largement déplacés vers LuaTeX (un successeur qui intègre Lua dans pdfTeX). Néanmoins, pour les documents principalement en anglais et en langues européennes, pdfTeX reste rapide, fiable et le choix le plus éprouvé qui soit.

Un héritage de primitifs

Les nombreuses primitives \pdf... introduites par pdfTeX ont été reportées dans les moteurs ultérieurs et sont devenues un standard de facto. Les caractéristiques micro-typographiques, par exemple, ont été adoptées à la fois dans XeTeX et LuaTeX.

Dans LuaTeX, cependant, l'espace de noms tentaculaire \pdf... a été nettoyé et une grande partie de celui-ci a été repliée dans un petit ensemble de passerelles : \pdfextension, \pdfvariable et \pdffeedback. Par exemple, \pdfliteral devient \pdfextension literal et \pdfoutput devient \outputmode. Vos connaissances sur l'ère pdfTeX sont en grande partie conservées, mais il convient de rappeler que l'orthographe change sur le moteur le plus récent.

Où cela s'intègre-t-il dans l'écriture quotidienne

Pour les articles en anglais, les rapports courts et les modèles occidentaux existants, pdflatex reste rapide et fiable. Chargez \usepackage{microtype}, conservez les graphiques sous PNG / JPEG / PDF et convertissez EPS en PDF avant l'inclusion. Dès que vous avez besoin de polices japonaises ou système, ne continuez pas à empiler des solutions de contournement sur pdfTeX ; considérez upLaTeX, LuaLaTeX ou XeLaTeX.

  • Raisons de rester : compatibilité des modèles existants, rapidité et composition occidentale stable.
  • Raisons de changer : travail multilingue Unicode, polices OS, japonais ou traitement basé sur Lua.
  • Échec courant : chargement de fontspec sous pdfLaTeX. fontspec appartient à XeLaTeX / LuaLaTeX.