pdfTeX

pdfTeX es el motor TeX que produce PDF directamente, sin ningún paso DVI en el medio. Es lo que realmente ejecuta pdflatex, y durante años el motor TeX más utilizado en el mundo. Su característica distintiva es la *microtipografía*: interletraje de margen, que permite que los caracteres en los bordes de una línea sobresalgan ligeramente más allá del bloque de texto, y expansión de fuente, que estira o reduce el ancho de los glifos casi imperceptiblemente. Esto es lo que hace que pdfTeX sea especial en el eje de la calidad tipográfica.

¿Qué es pdfTeX?

El TeX original de Knuth solo emite un formato intermedio llamado DVI (independiente del dispositivo), que luego un programa separado convierte a PostScript o PDF. pdfTeX elimina un paso de esa canalización y genera PDF directamente desde el generador de páginas de TeX. Fue escrito a finales de la década de 1990 por Hàn Thế Thành, originario de Vietnam, como parte de su trabajo de doctorado en la Universidad Masaryk en la República Checa. El primer lanzamiento público fue en 1996.

La clave a tener en cuenta es que pdfTeX es un motor, no un formato. El motor es el ejecutable que hace el trabajo; el formato es el sistema de comandos (LaTeX, Plain TeX). El motor pdfTeX que ejecuta el formato LaTeX le proporciona pdfLaTeX (el comando pdflatex); ejecutar Plain TeX le da pdftex. Cuando dices que estás "escribiendo en pdfLaTeX", pdfTeX es el motor que se encuentra debajo.

pdfTeX incorpora las extensiones e-TeX. e-TeX es un conjunto de adiciones a la maquinaria macro de TeX (\protected, \unexpanded, más registros, soporte de composición tipográfica de derecha a izquierda y más) que el LaTeX moderno da por sentado. Históricamente, el pdfTeX habilitado para e-TeX se enviaba como pdfetex y se convirtió en el motor predeterminado desde TeX Live 2004. Puedes pensar con seguridad en el pdflatex de hoy como pdfTeX-with-e-TeX.

Salida PDF, o aún DVI

De forma predeterminada, produce PDF directamente, pero pdfTeX aún puede emitir DVI. El cambio es el parámetro entero \pdfoutput: configure \pdfoutput=1 (cualquier valor positivo) para PDF, o \pdfoutput=0 para volver al clásico DVI. El DVI producido con \pdfoutput=0 es, en principio, idéntico al que habría emitido el TeX original.

Este valor debe fijarse antes de que se envíe la primera página y no se puede cambiar entre PDF y DVI a mitad del documento. En LaTeX, la detección de paquetes y controladores suele ocurrir muy temprano, por lo que el lugar práctico seguro es la parte superior, antes de \documentclass. Algunos paquetes que dependen de especiales de PostScript, como PSTricks, a veces necesitan la ruta DVI→PS→PDF, y ahí es donde \pdfoutput=0 se gana la vida.

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}

Microtipografía

Ningún relato de pdfTeX está completo sin microtipografía. Este fue el tema de la tesis doctoral de Hàn Thế Thành, *Extensiones microtipográficas al sistema tipográfico TeX*, defendida en la Facultad de Informática de la Universidad de Masaryk en octubre de 2000 bajo la dirección de Jiří Zlatuška: un conjunto de ajustes sutiles, entretejidos en el algoritmo de salto de línea de TeX, que suavizan el borde del bloque de texto y igualar el espacio dentro de una línea. La idea se remonta al programa hz desarrollado por Hermann Zapf y Peter Karow.

El primero es protrusión de caracteres, también llamado interletraje de margen. Al dejar que los puntos, las comas, los guiones y la puntuación cuelguen ligeramente más allá del borde del bloque de texto, un margen que parece irregular bajo una justificación puramente mecánica parece ópticamente recto. Es una generalización de la antigua práctica de puntuación colgante.

El segundo es la expansión de fuente, el algoritmo hz. Al utilizar formas de glifos estiradas o encogidas horizontalmente en una cantidad imperceptiblemente pequeña, el espaciado entre palabras se puede hacer más uniforme. pdfTeX incorpora este espacio para flexionar en la propia decisión de salto de línea, eligiendo mejores puntos de interrupción. El resultado es menos líneas con espacios entre palabras (los llamados "ríos") y una textura general más uniforme del párrafo.

Estos se pueden controlar con primitivas sin procesar. La protrusión usa \pdfprotrudechars (0 = desactivado, 1 = activado, 2 = también reflejado en los cálculos de ancho) junto con \lpcode (borde izquierdo) y \rpcode (borde derecho), que establecen la cantidad por carácter. La expansión de fuentes utiliza \pdfadjustspacing (=2 integra el estiramiento en el salto de línea) junto con \efcode, que establece la disposición de cada carácter a estirarse. En la práctica, casi nunca se tocan directamente.

En documentos reales, simplemente carga el paquete microtype, que incluye todo esto y selecciona valores predeterminados razonables para usted. Una sola línea, \usepackage{microtype}, activa la protrusión y la expansión de fuentes con una buena configuración.

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}

Características de PDF e inclusión de imágenes.

Debido a que construye PDF directamente, pdfTeX expone primitivas que llegan a las características de PDF. Los titulares son \pdfliteral, que inyecta operadores de dibujo PDF sin formato; \pdfobj, que crea un objeto PDF directamente; y \pdfannot, que coloca una anotación (un enlace, un campo de formulario, etc.). Los hipervínculos y marcadores se crean sobre estos mecanismos mediante el paquete hyperref.

Para configuraciones de todo el documento, existe \pdfinfo, que escribe metadatos como el título y el autor; \pdfcompresslevel, que establece con qué fuerza se comprime la salida PDF; y \pdfpageattr, que adjunta atributos a cada página.

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}

Las imágenes también funcionan directamente. Una ventaja de pdfTeX es que puede incluir PNG, JPEG y PDF sin conversión intermedia (EPS, por el contrario, debe convertirse primero a PDF); en el nivel bajo, \pdfximage lee una imagen. Sin embargo, normalmente solo usas \includegraphics del paquete graphicx, que llama las primitivas correctas por ti.

Primitivoque hace
\pdfliteralInsertar operadores de dibujo PDF sin formato
\pdfobj / \pdfannotCree un objeto/anotación PDF directamente
\pdfinfoEscribir metadatos (título, autor,…)
\pdfcompresslevelNivel de compresión de salida PDF (0–9)
\pdfximageIncluir una imagen PNG / JPEG / PDF
\pdfpageattrAdjunte atributos PDF a cada página

Límites y cuándo cambiar

A pesar de todo su poder, pdfTeX conlleva limitaciones que hoy en día parecen anticuadas. Lo más importante es que es un motor de 8 bits. No tiene maquinaria incorporada para tomar Unicode como entrada como lo hacen XeTeX y LuaTeX, y no está diseñado para componer, digamos, UTF-8 japonés directamente (para texto occidental esto fue parcheado con inputenc/fontenc).

El manejo de fuentes también es limitado. Las métricas dependen de los archivos TFM (TeX Font Metric), y los glifos reales se incrustan a partir de fuentes Type1 o TrueType a través de archivos de mapas. No puede simplemente nombrar una fuente OpenType instalada en el sistema operativo y utilizarla. Y no hay ningún lenguaje de secuencias de comandos integrado como Lua para ejecutar programas durante la composición tipográfica.

Esta es exactamente la razón por la que el deseo de usar fuentes del sistema o componer muchos idiomas en Unicode empuja a las personas hacia XeTeX o LuaTeX. Si está comenzando desde cero, y especialmente para los japoneses, esos motores (upLaTeX o LuaLaTeX para los japoneses) son la opción práctica.

El propio pdfTeX se encuentra ahora en un modo de mantenimiento estable, más o menos congelado. Las correcciones de errores continúan, pero el nuevo desarrollo se ha trasladado en gran medida a LuaTeX (un sucesor que incorpora Lua en pdfTeX). Aun así, para documentos en su mayoría en inglés y en idiomas europeos, pdfTeX sigue siendo rápido, confiable y la opción más probada que existe.

Un legado de primitivos

Las numerosas primitivas \pdf... que introdujo pdfTeX se trasladaron a motores posteriores y se convirtieron en un estándar de facto. Las características microtipográficas, por ejemplo, se adoptaron tanto en XeTeX como en LuaTeX.

Sin embargo, en LuaTeX, el extenso espacio de nombres \pdf... se limpió y gran parte de él se dobló en un pequeño conjunto de puertas de enlace: \pdfextension, \pdfvariable y \pdffeedback. Por ejemplo, \pdfliteral se convierte en \pdfextension literal y \pdfoutput se convierte en \outputmode. Su conocimiento de la era pdfTeX se conserva en su mayor parte, pero vale la pena recordar que la ortografía cambia en el motor más nuevo.

Dónde encaja en la escritura diaria

Para artículos en inglés, informes breves y plantillas occidentales existentes, pdflatex sigue siendo rápido y confiable. Cargue \usepackage{microtype}, mantenga los gráficos como PNG / JPEG / PDF y convierta EPS a PDF antes de incluirlos. En el momento en que necesite fuentes japonesas o del sistema, no siga acumulando soluciones alternativas en pdfTeX; considere upLaTeX, LuaLaTeX o XeLaTeX.

  • Razones para quedarse: compatibilidad con plantillas existentes, velocidad y composición tipográfica occidental estable.
  • Razones para cambiar: trabajo multilingüe Unicode, fuentes OS, japonés o procesamiento basado en Lua.
  • Error común: cargar fontspec en pdfLaTeX. fontspec pertenece a XeLaTeX / LuaLaTeX.