js 系クラス(jsarticle ほか)

日本語の論文や書籍を組むとき、標準の articlebook の代わりに使うのが js 系のクラス群です。出発点は奥村晴彦氏の jsclassesjsarticle ほか)で、pLaTeX/upLaTeX の事実上の標準。LuaLaTeX 向けの移植が ltjsclasses、さらにどのエンジンでも同じ原稿が通るようにしたのが ZR 氏の BXjscls です。いずれも標準クラスの操作感を保ちつつ、日本語の字送りと行グリッドを整えます。このページでは三系統の違いと選び分けを見ていきます。

jsclasses — pLaTeX/upLaTeX の定番

jsclasses は、LaTeX3 の classes.dtx と(株)アスキーの jclasses.dtx をもとに 奥村晴彦 氏が作ったクラス集で、現在は 日本語 TeX 開発コミュニティ が GitHub(texjporg/jsclasses)で保守しています。提供されるのは jsarticle(論文・レポート用)、jsbook(書籍用)、jsreport(レポート用)の三つ(ほかに学会誌用の jspf、紀要用の kiyou)。jsreport は比較的新しく、従来 jsbookreport オプションで代用していたものを独立クラスにしたものです。

標準クラスとの最大の違いは、本文を 10.5 ポイント(≒ 13 級) を基準に設計し、和文を JIS フォントメトリック(jis.tfmjisg.tfm、東京書籍印刷の小林肇氏による)で組むことです。これにより全角の字幅・行間が日本語の組版にふさわしく整います。クラスは標準クラスのインターフェース(\section などの命令、用紙・段組・両面のオプション)をそのまま引き継ぐので、標準クラスを知っていればすぐ使えます(→ 標準クラス)。

upLaTeX で使うときは、クラスオプションに **uplatex を付けます(田中琢爾氏による upLaTeX 対応パッチに由来)。DVI を経由するので、PDF 化のドライバとして dvipdfmx** も併せて指定するのが定番です。

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

おもなクラスオプションは標準クラス譲りで、a4paper(既定)・b5paper などの用紙、twocolumntwosidelandscapetitlepagedraft のほか、jsbookjsreport では章の起こし方を決める openrightopenleftopenany が使えます。和文 TFM を旧来の min10goth10 に戻す mingoth、和文を数式フォントとして登録しない disablefamily(綴りは disablejfam)などもあります。

文字サイズと拡大率の話(nomag)

jsclasses は文字サイズの指定が標準クラスより豊富です。標準の 10pt11pt12pt に加えて、等比数列になるよう選ばれた 8pt9pt14pt17pt21pt25pt30pt36pt43pt、さらに級(Q)単位の 12Q14Q10ptj 系の実寸オプションが使えます。

これを実現する仕組みに歴史的な事情があります。jsclasses は元来、本文を 10 ポイントで組んだ結果を **TeX の \mag プリミティブで全体的に拡大・縮小** することで、指定した文字サイズに合わせていました(10pt なら等倍、11pt なら約 1.095 倍…)。\mag は文書全体に一律のズームをかける機能で、文字も寸法もまとめて拡大できる反面、\mag を理解しない一部のツールや、後段の dvipdfmxdvips の扱いに依存するという弱点がありました。

そこで \mag を使わず、各種寸法のほうをスケールさせる オプション **nomag が 2016 年に追加され、さらにフォント選択システム NFSS にパッチを当てて オプティカルサイズも調整する nomag*** が用意されました。\mag を使う従来の挙動に戻すのが **usemag** です。

オプション挙動
usemag\mag を使って全体を拡大・縮小する従来方式。jsclasses の 既定
nomag\mag を使わず、レイアウトの各種寸法のほうをスケールさせる
nomag*nomag に加え、NFSS にパッチを当ててオプティカルサイズも調整する

jsclasses の既定は usemag ですが、\mag がからむ不具合を避けたいときは nomag* を選ぶとよいでしょう。なお、和文の大きさと指定サイズの比(1 zw ÷ 要求サイズ)は実数マクロ **\Cjascale**(既定 0.924715)が保持しており、13 級 ≒ 10.5 ポイントという設計値に対応します。

ltjsclasses — LuaLaTeX 用の移植

ltjsclasses は、jsclasses を LuaLaTeX(luatexja) 用に改変したクラス集で、LuaTeX-ja プロジェクトが保守しています。ltjsarticleltjsbookltjsreport(ほかに ltjspfltjskiyou)を提供し、名前のとおり jsclasses と一対一に対応します。和文は luatexja 標準のメトリック(jfm-ujis.lua)を使い、DVI を介さず直接 PDF を出力します。

jsclasses からの大きな違いは拡大率の扱いです。**LuaTeX は(beta-0.87.0 以降)PDF 出力時に \mag を使えなくなった** ため、ltjsclasses は \mag 方式を採らず、**nomag* が既定** になっています(usemag を指定すると警告が出ます)。また uplatex オプションや autodetect-engine オプションは(不要なので)削除されていて、指定するとエラーになります。和文フォントを差し替えるときは luatexja-fontspec を併用します。

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

BXjscls — どのエンジンでも動く

BXjscls(八登崇之氏、通称 ZR)は、jsclasses の設計を どのエンジンでも使えるように拡張 したクラス集です。bxjsarticlebxjsbookbxjsreportbxjsslide を提供し、jsclasses が (u)pLaTeX 専用なのに対し、pdfLaTeX・XeLaTeX・LuaLaTeX でも日本語を組めます。

鍵になるのが **engine=** オプションです。pdflatexxelatexlualatexplatexuplatex のいずれか(または自動判定の autodetect-engine)を指定すると、その処理系に合わせて適切な日本語パッケージが読み込まれます。さらに **ja=**(ja ドライバ、旧称 jadriver)で日本語処理の方式を選び、既定の standard なら設定なしですぐ日本語が書けます(ほかに minimalmodernpandoc)。

engine=読み込まれる主な日本語パッケージ(ja=standard)
platex / uplatex(u)pLaTeX 本体の日本語機能をそのまま使う
lualatexluatexja(LuaTeX-ja)
xelatexzxjatype(xeCJK 系)
pdflatexbxcjkjatype(CJK 系)

文字サイズの基準は base=、和文の基準は jbase= で指定でき、和文スケール比は **\jsScale**(既定 0.924715。scale= オプションで変更)が保持します。\mag 周りの拡大方式は magstyle= で選び、usemagnomagnomag* を取れます。LuaTeX v0.87 以降は \mag が使えないため、その環境では自動的に nomag* 相当になります。

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

どれを選ぶか

js 系では、まずエンジンを決め、それに合うクラスを選ぶ のが筋道です。同じ「jsarticle 風の体裁」でも、エンジンごとに使うクラスが変わります。

  • pLaTeX/upLaTeX を使う(既存資産・学会指定など)なら jsclasses。 upLaTeX では \documentclass[uplatex,dvipdfmx]{jsarticle} が定番。
  • LuaLaTeX 中心なら ltjsclasses。 OS の OpenType フォントが使え、直接 PDF が出る。nomag* が既定。
  • エンジンを固定したくない・横断的に配布するなら BXjscls。 engine= を切り替えるだけで pdfLaTeX・XeLaTeX・LuaLaTeX・(u)pLaTeX を行き来できる。
  • JLReq 準拠の素直なクラスが欲しいなら jlreq も検討に値する(js 系とは別系統で、エンジン自動判定)。

どれを選んでも、標準クラスの命令体系の上に日本語の組版規則を載せたものなので、本文の書き方そのものは変わりません。プリアンブルやオプションの組み立て方は「ドキュメントクラスとプリアンブル」も合わせて参照してください。