Classes basées sur js

Pour composer des articles ou des livres en japonais, on utilise les classes de la famille js plutôt que les classes standard article et book. Le point de départ est jsclasses de Haruhiko Okumura (jsarticle et apparentées), le standard de fait pour pLaTeX/upLaTeX. ltjsclasses en est le portage LuaLaTeX, et BXjscls de ZR va plus loin en permettant à une même source de compiler avec n’importe quel moteur. Toutes conservent le toucher des classes standard tout en corrigeant l’espacement japonais et la grille de lignes. Cette page présente les trois familles et les critères de choix.

jsclasses — le standard pLaTeX/upLaTeX

jsclasses est un ensemble de classes créé par Haruhiko Okumura à partir de classes.dtx de LaTeX3 et de jclasses.dtx d’ASCII Corporation ; il est aujourd’hui maintenu par la Japanese TeX Development Community sur GitHub (texjporg/jsclasses). Il fournit trois classes : jsarticle (articles et rapports), jsbook (livres) et jsreport (rapports), plus jspf pour une revue de société savante et kiyou pour des bulletins. jsreport est relativement récent : il extrait en classe autonome ce que l’on faisait auparavant avec l’option report de jsbook.

La principale différence avec les classes standard est que le corps est conçu autour de 10,5 pt (≈ 13 Q) et que le japonais est composé avec les métriques JIS (jis.tfm, jisg.tfm, de Hajime Kobayashi, Tokyo Shoseki Printing). Les largeurs de caractères pleine chasse et l’interligne sont ainsi adaptés à la composition japonaise. La classe reprend telle quelle l’interface des classes standard — commandes comme \section, options de papier, colonnes et recto verso — si bien que vous pouvez l’utiliser immédiatement si vous connaissez les classes standard (voir Standard classes).

Pour l’utiliser avec upLaTeX, ajoutez l’option de classe uplatex (issue du correctif de prise en charge upLaTeX de Takuji Tanaka). Comme la chaîne passe par DVI, on précise aussi généralement dvipdfmx comme pilote PDF.

latex
\documentclass[uplatex,dvipdfmx]{jsarticle}
\begin{document}
こんにちは、\LaTeX! これは jsarticle で組んだ日本語の文書です。
\end{document}

Les principales options de classe viennent des classes standard : formats comme a4paper (défaut) et b5paper, puis twocolumn, twoside, landscape, titlepage et draft ; dans jsbook/jsreport, openright/openleft/openany déterminent où commencent les chapitres. On trouve aussi mingoth pour revenir aux anciens TFM japonais min10/goth10, et disablejfam pour éviter d’enregistrer les polices japonaises comme polices mathématiques.

Tailles de police et histoire de l’agrandissement (nomag)

jsclasses offre un ensemble d’options de taille plus riche que les classes standard. En plus des habituels 10pt/11pt/12pt, elle ajoute 8pt, 9pt, 14pt, 17pt, 21pt, 25pt, 30pt, 36pt et 43pt (choisis pour former une suite géométrique), ainsi que les options en unités Q 12Q/14Q et les options de taille réelle de style 10ptj.

Le mécanisme a une histoire particulière. À l’origine, jsclasses composait le corps en 10 pt puis agrandissait ou réduisait tout le résultat avec la primitive TeX \mag pour atteindre la taille demandée (×1 pour 10 pt, ≈ ×1,095 pour 11 pt, etc.). \mag applique un zoom uniforme à tout le document : pratique, car glyphes et dimensions changent ensemble, mais fragile, car certains outils ne le comprennent pas et le résultat dépend du traitement ultérieur par dvipdfmx/dvips.

L’option nomag a donc été ajoutée en 2016 : au lieu d’utiliser \mag, elle met directement à l’échelle les différentes dimensions. L’option sœur nomag* va plus loin et ajuste aussi la taille optique en corrigeant le système de sélection des polices NFSS. L’option qui rétablit l’ancien comportement fondé sur \mag est usemag.

OptionComportement
usemagAncienne méthode : tout mettre à l’échelle avec \mag. Le défaut de jsclasses
nomagÉviter \mag ; mettre plutôt les dimensions de mise en page à l’échelle
nomag*Comme nomag, avec en plus un correctif NFSS pour ajuster la taille optique

jsclasses utilise usemag par défaut, mais si vous voulez éviter les particularités liées à \mag, choisir nomag* est judicieux. Le rapport entre la taille des caractères japonais et la taille demandée (1 zw ÷ taille demandée) est conservé dans la macro réelle \Cjascale (défaut 0,924715), ce qui correspond à la valeur de conception 13 Q ≈ 10,5 pt.

ltjsclasses — le portage LuaLaTeX

ltjsclasses adapte jsclasses à LuaLaTeX (luatexja) et est maintenu par le projet LuaTeX-ja. Il fournit ltjsarticle, ltjsbook et ltjsreport (ainsi que ltjspf et ltjskiyou), correspondant un à un aux jsclasses comme leurs noms l’indiquent. Le japonais utilise les métriques standard de luatexja (jfm-ujis.lua) et la sortie PDF est produite directement, sans passer par DVI.

La grande différence avec jsclasses concerne la mise à l’échelle. Comme LuaTeX ne peut plus utiliser \mag pour la sortie PDF depuis beta-0.87.0, ltjsclasses n’emploie pas l’approche \mag ; nomag* est le défaut (spécifier usemag déclenche un avertissement). Les options uplatex et autodetect-engine ont aussi été supprimées, car inutiles ici, et provoquent une erreur si elles sont données. Pour changer les polices japonaises, on l’associe à luatexja-fontspec.

latex
% lualatex でコンパイル
\documentclass{ltjsarticle}
\usepackage{luatexja-fontspec}
\setmainjfont{Noto Serif CJK JP}   % 明朝
\begin{document}
こんにちは、\LaTeX! ltjsclasses は LuaLaTeX 専用です。
\end{document}

BXjscls — fonctionne avec tout moteur

BXjscls (Takayuki Yato, dit ZR) étend la conception de jsclasses pour l’utiliser avec n’importe quel moteur. Il fournit bxjsarticle, bxjsbook, bxjsreport et bxjsslide ; alors que jsclasses est réservé à (u)pLaTeX, BXjscls peut aussi composer du japonais avec pdfLaTeX, XeLaTeX et LuaLaTeX.

La clé est l’option engine=. Donnez-lui pdflatex, xelatex, lualatex, platex ou uplatex (ou autodetect-engine pour détecter automatiquement), et la classe charge le package japonais adapté à ce moteur. L’option ja= (pilote ja, anciennement jadriver) choisit ensuite le schéma de traitement du japonais ; avec le défaut standard, on peut écrire du japonais immédiatement sans configuration supplémentaire (autres valeurs : minimal, modern, pandoc).

engine=Principal package japonais chargé (ja=standard)
platex / uplatexUtilise la prise en charge japonaise native de (u)pLaTeX
lualatexluatexja (LuaTeX-ja)
xelatexzxjatype (fondé sur xeCJK)
pdflatexbxcjkjatype (fondé sur CJK)

La taille de base du texte se règle avec base=, la base japonaise avec jbase=, et le rapport d’échelle japonais est conservé dans \jsScale (défaut 0,924715, modifiable avec l’option scale=). Le style de mise à l’échelle autour de \mag se choisit avec magstyle=, qui accepte usemag, nomag ou nomag*. Comme LuaTeX v0.87 et suivants ne peuvent pas utiliser \mag, cet environnement se comporte automatiquement comme nomag*.

latex
% 同じ原稿を engine= だけ変えれば各エンジンで通る
\documentclass[engine=lualatex,ja=standard]{bxjsarticle}
\begin{document}
こんにちは、\LaTeX! engine= を platex に変えれば pLaTeX でも組めます。
\end{document}

Lequel choisir ?

Avec la famille js, la logique est de choisir d’abord le moteur, puis la classe qui lui convient. Même pour un rendu de style “jsarticle”, la classe utilisée change selon le moteur.

  • Vous utilisez pLaTeX/upLaTeX (sources existantes, exigences de revue) ? jsclasses. Avec upLaTeX, \documentclass[uplatex,dvipdfmx]{jsarticle} est la forme standard.
  • Principalement LuaLaTeX ? ltjsclasses. Polices OpenType du système et sortie PDF directe ; nomag* est le défaut.
  • Vous ne voulez pas fixer le moteur, ou vous distribuez entre plusieurs moteurs ? BXjscls. Changer seulement engine= permet de passer entre pdfLaTeX, XeLaTeX, LuaLaTeX et (u)pLaTeX.
  • Vous voulez une classe propre et conforme à JLReq ? jlreq mérite aussi d’être envisagée (lignée séparée de la famille js, avec auto-détection du moteur).

Quel que soit votre choix, chaque classe ajoute les règles de composition japonaise au jeu de commandes des classes standard ; la manière d’écrire le corps ne change donc pas. Pour assembler le préambule et les options, consultez aussi “Document class & preamble”.

Transformer le choix en modèle de soumission

Pour les documents japonais, ne choisissez pas la classe pour commencer aussitôt à écrire. Fixez d’abord le moteur, la classe et la route PDF comme un seul ensemble. Pour upLaTeX, cela signifie uplatex plus dvipdfmx ; pour LuaLaTeX, ltjsarticle plus la configuration de polices ; pour une distribution multi-moteur, BXjscls avec engine=. Notez les mêmes noms dans le README du projet ou les réglages de build afin que les co-auteurs et la CI ne compilent pas par une autre route.

latex
% upLaTeX で提出する日本語レポートの固定例
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}

% LuaLaTeX へ移すなら、クラスとフォント設定をセットで見直す
% \documentclass[a4paper]{ltjsarticle}
% \usepackage{luatexja-fontspec}

Les options de mise à l’échelle comme nomag et magstyle affectent non seulement l’apparence, mais aussi l’interprétation des dimensions par les outils ultérieurs. Commencez par les défauts de la classe et n’envisagez nomag* ou magstyle=nomag* que si le placement des images, geometry ou un post-traitement PDF révèle un vrai décalage de dimensions. La reproductibilité du rendu soumis compte plus que le chargement de toutes les options dès le départ.

Confirmer la route dans le log

Avec les classes de la famille js, la première ligne source peut être trompeuse. jsarticle est pour (u)pLaTeX, ltjsarticle pour LuaLaTeX, et bxjsarticle suit engine= ; après compilation, vérifiez donc au début du .log le nom de classe, le nom du moteur et le package japonais chargé. En collaboration, l’objectif n’est pas seulement “un PDF a été produit”, mais “un PDF a été produit par la route prévue”.

ChoixÀ inspecter dans le logSi cela diffère
jsarticlepLaTeX / upLaTeX plus la route dvipdfmxFixer la recette de build à uplatex + dvipdfmx
ltjsarticleLuaLaTeX et LuaTeX-jaNe pas garder la classe en revenant seulement à un autre moteur
bxjsarticleValeurs effectives de engine= et ja=Les aligner avec le README et la commande CI