Al componer artículos o libros en japonés, se usan las clases de la familia js en lugar de las estándar article y book. El punto de partida son jsclasses de Haruhiko Okumura (jsarticle y afines), el estándar de facto para pLaTeX/upLaTeX. ltjsclasses es el port para LuaLaTeX, y BXjscls de ZR va más allá al permitir que una misma fuente compile con cualquier motor. Todas conservan la sensación de las clases estándar mientras corrigen el espaciado japonés y la retícula de líneas. Esta página explica las tres familias y cómo elegir entre ellas.
jsclasses — el estándar de pLaTeX/upLaTeX
jsclasses es un conjunto de clases que Haruhiko Okumura construyó a partir de classes.dtx de LaTeX3 y jclasses.dtx de ASCII Corporation; hoy lo mantiene la Japanese TeX Development Community en GitHub (texjporg/jsclasses). Proporciona tres clases: jsarticle (artículos e informes), jsbook (libros) y jsreport (informes), además de jspf para una revista de sociedad y kiyou para boletines. jsreport es relativamente nueva: separa en una clase propia lo que antes se hacía con la opción report de jsbook.
La mayor diferencia respecto a las clases estándar es que el cuerpo se diseña alrededor de 10,5 pt (≈ 13 Q) y el japonés se compone con métricas de fuente JIS (jis.tfm, jisg.tfm, de Hajime Kobayashi, Tokyo Shoseki Printing). Así se ajustan anchuras de caracteres de ancho completo e interlineado adecuados para composición japonesa. La clase hereda tal cual la interfaz de las clases estándar, comandos como \section y opciones de papel, columnas y doble cara, de modo que si conoces las clases estándar puedes usarla enseguida (ver Standard classes).
Para usarla con upLaTeX, añade la opción de clase uplatex (procede del parche de compatibilidad con upLaTeX de Takuji Tanaka). Como la ruta pasa por DVI, lo habitual es especificar también dvipdfmx como controlador PDF.
\documentclass[uplatex,dvipdfmx]{jsarticle}
\begin{document}
こんにちは、\LaTeX! これは jsarticle で組んだ日本語の文書です。
\end{document}Las principales opciones de clase se heredan de las clases estándar: tamaños de papel como a4paper (predeterminado) y b5paper, además de twocolumn, twoside, landscape, titlepage y draft; en jsbook/jsreport, openright/openleft/openany deciden dónde se abren los capítulos. También existen mingoth, para volver los TFM japoneses a los antiguos min10/goth10, y disablejfam, para no registrar fuentes japonesas como fuentes matemáticas.
Tamaños de letra y la historia de la ampliación (nomag)
jsclasses ofrece más opciones de tamaño de letra que las clases estándar. Además de los habituales 10pt/11pt/12pt, añade 8pt, 9pt, 14pt, 17pt, 21pt, 25pt, 30pt, 36pt y 43pt (elegidos para formar una progresión geométrica), además de las opciones en unidades Q 12Q/14Q y las opciones de tamaño real estilo 10ptj.
El mecanismo tiene una historia particular. Originalmente, jsclasses componía el cuerpo a 10 pt y después escalaba todo el resultado con la primitiva \mag de TeX hasta el tamaño pedido (×1 para 10 pt, ≈ ×1,095 para 11 pt, etc.). \mag aplica un zoom uniforme a todo el documento: cómodo porque escala glifos y dimensiones juntos, pero frágil porque algunas herramientas no lo entienden y el resultado depende de cómo lo manejen después dvipdfmx/dvips.
Por eso en 2016 se añadió la opción nomag: en vez de usar \mag, escala directamente las distintas dimensiones. La opción compañera nomag* va más allá y también ajusta el tamaño óptico aplicando un parche al sistema de selección de fuentes NFSS. La opción que restaura el comportamiento antiguo basado en \mag es usemag.
| Opción | Comportamiento |
|---|---|
usemag | El método antiguo: escalar todo con \mag. El predeterminado en jsclasses |
nomag | Evitar \mag; escalar en su lugar las dimensiones del diseño |
nomag* | Como nomag, más un parche a NFSS para ajustar también el tamaño óptico |
jsclasses usa usemag por defecto, pero si quieres evitar las peculiaridades asociadas a \mag, conviene elegir nomag*. La razón entre el tamaño de caracteres japoneses y el tamaño solicitado (1 zw ÷ tamaño solicitado) se guarda en la macro real \Cjascale (predeterminado 0,924715), que corresponde al valor de diseño 13 Q ≈ 10,5 pt.
ltjsclasses — el port para LuaLaTeX
ltjsclasses adapta jsclasses a LuaLaTeX (luatexja) y lo mantiene el proyecto LuaTeX-ja. Proporciona ltjsarticle, ltjsbook y ltjsreport (además de ltjspf y ltjskiyou), correspondientes uno a uno con jsclasses como sugieren los nombres. El japonés usa las métricas estándar de luatexja (jfm-ujis.lua) y produce PDF directamente, sin pasar por DVI.
La gran diferencia respecto a jsclasses está en el manejo del escalado. Como LuaTeX ya no puede usar \mag para salida PDF desde beta-0.87.0, ltjsclasses no usa el método \mag; en su lugar nomag* es el predeterminado (especificar usemag produce una advertencia). También se eliminaron las opciones uplatex y autodetect-engine, porque aquí no hacen falta, y dan error si se indican. Para cambiar las fuentes japonesas se combina con luatexja-fontspec.
% lualatex でコンパイル
\documentclass{ltjsarticle}
\usepackage{luatexja-fontspec}
\setmainjfont{Noto Serif CJK JP} % 明朝
\begin{document}
こんにちは、\LaTeX! ltjsclasses は LuaLaTeX 専用です。
\end{document}BXjscls — funciona con cualquier motor
BXjscls (Takayuki Yato, conocido como ZR) amplía el diseño de jsclasses para que pueda usarse con cualquier motor. Proporciona bxjsarticle, bxjsbook, bxjsreport y bxjsslide; mientras que jsclasses es solo para (u)pLaTeX, BXjscls también puede componer japonés con pdfLaTeX, XeLaTeX y LuaLaTeX.
La clave es la opción engine=. Ponla en pdflatex, xelatex, lualatex, platex o uplatex (o autodetect-engine para detección automática), y la clase cargará el paquete japonés adecuado para ese motor. La opción ja= (controlador ja, antes jadriver) elige después el esquema de tratamiento japonés; con el valor predeterminado standard puedes escribir japonés de inmediato sin configuración adicional (también existen minimal, modern y pandoc).
| engine= | Paquete japonés principal cargado (ja=standard) |
|---|---|
platex / uplatex | Usa el soporte japonés nativo de (u)pLaTeX |
lualatex | luatexja (LuaTeX-ja) |
xelatex | zxjatype (basado en xeCJK) |
pdflatex | bxcjkjatype (basado en CJK) |
El tamaño base del texto se fija con base= y la base japonesa con jbase=, y la razón de escala japonesa se guarda en \jsScale (predeterminado 0,924715, modificable con scale=). El escalado estilo \mag se elige con magstyle=, que acepta usemag, nomag o nomag*. Como LuaTeX v0.87 y posteriores no pueden usar \mag, en ese entorno se comporta automáticamente como nomag*.
% 同じ原稿を engine= だけ変えれば各エンジンで通る
\documentclass[engine=lualatex,ja=standard]{bxjsarticle}
\begin{document}
こんにちは、\LaTeX! engine= を platex に変えれば pLaTeX でも組めます。
\end{document}Cuál elegir
En la familia js, la lógica es elegir primero el motor y después la clase que encaja con él. Incluso para el mismo aspecto “estilo jsarticle”, la clase usada cambia según el motor.
- ¿Usas pLaTeX/upLaTeX por material existente o requisitos de una revista? jsclasses. En upLaTeX,
\documentclass[uplatex,dvipdfmx]{jsarticle}es lo estándar. - ¿Principalmente LuaLaTeX? ltjsclasses. Fuentes OpenType del sistema y salida PDF directa;
nomag*es el predeterminado. - ¿No quieres fijar el motor o distribuyes entre motores? BXjscls. Cambiando solo
engine=puedes moverte entre pdfLaTeX, XeLaTeX, LuaLaTeX y (u)pLaTeX. - ¿Quieres una clase limpia y compatible con JLReq? jlreq también merece consideración (linaje separado de la familia js, con autodetección del motor).
Elijas la que elijas, todas superponen reglas de composición japonesa al conjunto de comandos de las clases estándar, así que la forma de escribir el cuerpo no cambia. Para montar el preámbulo y las opciones, consulta también “Document class & preamble”.
Convertir la elección en una plantilla de envío
En documentos japoneses, no elijas la clase para empezar a escribir de inmediato. Primero fija motor, clase y ruta a PDF como un conjunto. Para upLaTeX, eso significa uplatex más dvipdfmx; para LuaLaTeX, ltjsarticle más configuración de fuentes; para distribución multimotor, BXjscls con engine=. Registra los mismos nombres en el README del proyecto o en la configuración de compilación para que colaboradores y CI no compilen por otra ruta.
% upLaTeX で提出する日本語レポートの固定例
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
% LuaLaTeX へ移すなら、クラスとフォント設定をセットで見直す
% \documentclass[a4paper]{ltjsarticle}
% \usepackage{luatexja-fontspec}Opciones como nomag y magstyle afectan no solo al aspecto, sino también a cómo interpretan las dimensiones las herramientas posteriores. Empieza con los valores predeterminados de la clase y considera nomag* o magstyle=nomag* solo cuando la colocación de imágenes, geometry o el posprocesamiento de PDF muestren una discrepancia real de dimensiones. Importa más que la salida de envío sea reproducible que cargar todas las opciones desde el principio.
Confirmar la ruta en el log
Con las clases de la familia js, la primera línea de la fuente puede ser engañosa. jsarticle es para (u)pLaTeX, ltjsarticle para LuaLaTeX, y bxjsarticle sigue engine=, así que después de compilar conviene comprobar al inicio del .log el nombre de la clase, el motor y el paquete japonés cargado. En colaboración, lo importante no es solo “se produjo un PDF”, sino “se produjo por la ruta prevista”.
| Elección | Qué revisar en el log | Si difiere |
|---|---|---|
jsarticle | pLaTeX / upLaTeX más la ruta dvipdfmx | Fijar la receta de build en uplatex + dvipdfmx |
ltjsarticle | LuaLaTeX y LuaTeX-ja | No mantener la clase al volver solo a otro motor |
bxjsarticle | Valores efectivos de engine= y ja= | Hacerlos coincidir con el README y el comando de CI |