TeX/LaTeX y el japonés

En cuanto uno se pone a componer japonés con LaTeX, le dicen que ejecute platex o uplatex. Pero no existe ningún ejecutable con esos nombres. Ambos son nombres de formatos que carga un único motor, euptex: teclea platex y la primera línea en pantalla dice «This is e-upTeX». Digerido ese único hecho, se disipa más o menos la mitad de la opacidad del TeX japonés. Esta página explica por qué el japonés necesitó maquinaria propia, en qué se diferencian las tres vías vivas (pLaTeX/upLaTeX con dvipdfmx, LuaLaTeX con LuaTeX-ja y XeLaTeX) y con cuál conviene empezar el primer documento.

Por qué el japonés necesitó motores propios

La primera razón es rotunda: el TeX original solo podía direccionar 256 caracteres por fuente (128 en sus inicios). Meter ahí unos miles de kanji de uso corriente —por no hablar de las decenas de miles de los juegos JIS— exigía artificios como trocear una fuente en subfuentes de 256 glifos. La segunda razón cala más hondo: las reglas de composición son otras. La composición occidental se asienta en que la línea corta entre palabras y en que el espacio interpalabra se estira y se encoge. El japonés no tiene fronteras de palabra. La línea puede cortar casi en cualquier sitio, así que hay que decirle al sistema, como regla, dónde está prohibido cortar.

Esas posiciones prohibidas son las reglas kinsoku: ni signos de puntuación, ni paréntesis de cierre, ni marca de vocal larga, ni kana pequeño al principio de línea; ningún paréntesis de apertura al final. A eso se suman el espacio de un cuarto de cuadratín que se inserta donde el japonés toca al texto occidental (\xkanjiskip), el espaciado entre los propios caracteres japoneses (\kanjiskip), el apretado de la puntuación y la composición vertical. La familia pTeX lo resuelve todo asignando una penalización a cada corte candidato —tantos puntos si este carácter cae al principio de línea— y eligiendo la división del párrafo entero cuya suma sea mínima. Las reglas japonesas se vertieron, pues, como penalizaciones en el mecanismo que TeX ya tenía: mirar el párrafo completo y luego elegir los mejores cortes.

La diferencia entre platex y uplatex, y por qué son un mismo motor

La diferencia está en el repertorio de caracteres: platex se queda dentro de JIS X 0208, uplatex abarca todo Unicode. Y no son dos programas, sino dos formatos que carga el mismo motor euptex. Al abrir texmf-dist/web2c/fmtutil.cnf en un árbol de TeX Live, la relación aparece escrita en dos líneas: la primera columna es el nombre del formato, la segunda el motor que lo construye. En ambas filas la segunda columna dice euptex. La distinción entre motor y formato se ve aquí con más nitidez que en ningún otro sitio.

fmtutil.cnf
# texmf-dist/web2c/fmtutil.cnf -- format, engine, hyphenation, ini file
platex   euptex language.dat *platex.ini
uplatex  euptex language.dat *uplatex.ini

# and so the banner names the engine, not the command you typed:
$ platex  ... This is e-upTeX, Version 3.141592653-p4.1.1-u1.30-... (utf8.euc)   (preloaded format=platex)
$ uplatex ... This is e-upTeX, Version 3.141592653-p4.1.1-u1.30-... (utf8.uptex) (preloaded format=uplatex)

Ese cartel merece una lectura atenta. 3.141592653 es el propio número de versión del TeX congelado de Knuth; p4.1.1 es el nivel de la extensión pTeX y u1.30 el de upTeX: tres generaciones apiladas en una sola línea. El paréntesis final también cuenta: platex anuncia (utf8.euc) y uplatex, (utf8.uptex). La fuente se escribe en UTF-8 en ambos casos, pero los dos formatos guardan los kanji en codificaciones internas distintas. No es una abstracción: muerde. Dale a platex un carácter fuera de JIS X 0208 —髙, 𠮷 o 鷗, por ejemplo— y se detiene con este error:

log
! LaTeX Error: Unicode character ^^e9^^ab^^99 (U+9AD9)
               not set up for use with LaTeX.

# same file, same class, run through uplatex instead: compiles silently.

La conclusión práctica es simple. Casi no hay motivo para empezar un documento nuevo en pLaTeX; usa uplatex. Variantes gráficas en nombres propios, kanji de forma antigua, caracteres suplementarios, una cita en coreano o en chino: nada de eso es exótico, y cada uno detiene en seco a platex. Los motivos que quedan para elegir platex son estrechos: el archivo de clase que exige la revista está escrito solo para pLaTeX, o se hereda una fuente ya existente. Los motores y macros de la familia pTeX los mantiene hoy la comunidad japonesa de desarrollo de TeX.

Las tres vías vivas hoy

En la práctica hay tres. upLaTeX genera un DVI que dvipdfmx convierte en PDF, la vía tradicional; LuaLaTeX con luatexja, que emite PDF directamente; y XeLaTeX con xeCJK. Existe una cuarta, pdfLaTeX con CJKutf8, pero obliga a envolver el texto en \begin{CJK}{UTF8}{min} y no ofrece un kinsoku serio, así que solo sirve para colar unas palabras en japonés dentro de un artículo en inglés. Lo que separa a las tres es cómo llegan a las fuentes y cuán largo es el camino hasta el PDF.

VíaClase y paquetesCarácter y usos
uplatex + dvipdfmxjlreq, jsarticle (jsclasses)Rápido; el mayor historial en vertical; lo exigen a menudo las revistas. Dos pasos hasta el PDF
lualatex + luatexjajlreq, ltjsarticle (ltjsclasses)Usa las fuentes OpenType del sistema tal cual y escribe PDF directamente; el más sólido en Unicode. Compila lento
xelatex + xeCJKbxjsarticle (bxjscls) y similaresElección de fuentes cómoda; bueno para mezclar chino y coreano. Menos fino que luatexja en las reglas japonesas
pdflatex + CJKutf8article más el paquete CJKUnas palabras dentro de texto inglés. Exige \begin{CJK}{UTF8}{min} alrededor; no vale para todo un documento

Por qué la vía japonesa sigue pasando por DVI

Porque los motores de la familia pTeX no saben escribir PDF directamente. Donde pdfTeX integró la salida PDF, pTeX termina su tarea en el formato de salida original de TeX, el DVI. Convertir ese DVI en PDF es cosa de dvipdfmx, que se encarga de incrustar las fuentes japonesas y de las transformaciones de coordenadas del texto vertical. La vía japonesa tradicional reparte, pues, la composición y la generación del PDF entre dos programas. Al ejecutar en local uplatex y luego dvipdfmx, un .dvi de unos cientos de bytes se convierte en un PDF de unos kilobytes; una mirada con pdffonts muestra HaranoAjiMincho incrustada como fuente CID Type 0C.

shell
$ uplatex doc.tex      # typeset -> doc.dvi
$ dvipdfmx doc.dvi     # convert  -> doc.pdf
$ pdffonts doc.pdf
# HaranoAjiMincho-Regular   CID Type 0C   Identity-H   emb yes

# dvipdfmx is a symlink to xdvipdfmx: one binary serves both
# the Japanese .dvi route and XeTeX's .xdv output.

De paso: dvipdfmx en disco es un enlace simbólico a xdvipdfmx. Un solo binario atiende tanto la vía japonesa del .dvi como el .xdv que produce XeTeX. Un conversor pulido para el japonés acabó siendo la etapa de salida de XeTeX en todo el mundo: un caso de herramienta nacida en Japón incorporada a la corriente principal de TeX. Otro tanto ocurre con las fuentes Harano Aji incrustadas, que vienen con TeX Live, de modo que el primer PDF en japonés sale sin comprar ninguna tipografía.

Con cuál escribir el primer documento

Escribe \documentclass{jlreq} y compílalo con lualatex. El motivo no es solo la calidad. La clase jlreq, de Noriyuki Abe, está diseñada siguiendo los «Requirements for Japanese Text Layout» del W3C, pero lo más valioso en la práctica es que la misma fuente funciona sin cambios en LuaLaTeX, upLaTeX y pLaTeX por igual. El motor se detecta solo y, si hace falta, se puede indicar platex, uplatex o lualatex como opción de clase. La primera elección no es, por tanto, irreversible. El mismo .tex pasado por uplatex y por lualatex produce en ambos casos un PDF con Harano Aji Mincho incrustada.

latex
% runs unchanged under lualatex, uplatex and platex
\documentclass{jlreq}
\begin{document}
こんにちは、\LaTeX。日本語の組版です。
\end{document}

Cuando quieras otras fuentes, carga luatexja-fontspec bajo LuaLaTeX y fija la mincho con \setmainjfont y la gótica con \setsansjfont. Si tiras por lo tradicional, lo estándar son jsclasses (jsarticle, jsbook) para pLaTeX y upLaTeX, y ltjsclasses (ltjsarticle y compañía) para LuaLaTeX. Pero si eliges ltjsarticle, que el compilador sea también LuaLaTeX: el desajuste entre clase y motor es el accidente más frecuente en los montajes japoneses.

Dónde falla el primer intento

Cuando el japonés no sale, o sale como mojibake, la causa es casi siempre una de dos: la codificación de la fuente o un desajuste entre clase y motor. Guarda la fuente como UTF-8. EUC-JP, Shift_JIS e ISO-2022-JP convivieron en su día y un conversor como nkf era equipo básico; ya no. upTeX y LuaTeX son nativos de Unicode, y el pLaTeX actual también da por supuesta la entrada en UTF-8. Solo hace falta convertir al heredar una fuente antigua. La otra trampa son los finales de línea: LF y CRLF mezclados en un mismo archivo pueden causar roturas cuyo origen cuesta ver.

  • No compongas cuerpo de texto japonés con pdflatex. Ante errores o mojibake, sospecha primero del ajuste del compilador; incluso con CJKutf8 hay que envolver el texto en \begin{CJK}{UTF8}{min}.
  • Si cargas ltjsarticle o luatexja, compila con lualatex; para jsarticle, con uplatex. La clase decide el motor, así que cambia también el ajuste de compilación del editor.
  • Si platex avisa ! LaTeX Error: Unicode character ... not set up for use with LaTeX., ese carácter queda fuera de JIS X 0208; pasar a uplatex suele resolverlo.
  • En trabajos a varias manos, anota tres cosas en una línea del README: motor, codificación y clase. Sin las tres, la compilación no se reproduce en otra máquina.
  • Si la revista reparte un archivo de clase escrito para platex, úsalo sin más, pero comprueba antes de enviar que no se han colado caracteres variantes en el texto.