マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

新しくなるはずの BXjscls に関する何か (1)

BXjscls の大改造に着手している。

新しい機能

以下のようなことができる。

これは pdfLaTeX 文書。

% 文字コードは UTF-8; pdflatex で組版
\documentclass[pdflatex,a4paper,jadriver=standard]{bxjsarticle}
\begin{document}
\section{まとめ}
ご清聴ありがとうございました。
\end{document}

これは pLaTeX 文書。

% 文字コードは UTF-8; platex -kanji=utf8 で組版
\documentclass[platex,a4paper,jadriver=standard]{bxjsarticle}
\begin{document}
\section{まとめ}
ご清聴ありがとうございました。
\end{document}

これは upLaTeX 文書。

% 文字コードは UTF-8; uplatex で組版
\documentclass[uplatex,a4paper,jadriver=standard]{bxjsarticle}
\begin{document}
\section{まとめ}
ご清聴ありがとうございました。
\end{document}

これは XeLaTeX 文書。

% 文字コードは UTF-8; xelatex で組版
\documentclass[xelatex,a4paper,jadriver=standard]{bxjsarticle}
\begin{document}
\section{まとめ}
ご清聴ありがとうございました。
\end{document}

これは LuaLaTeX 文書。

% 文字コードは UTF-8; lualatex で組版
\documentclass[lualatex,a4paper,jadriver=standard]{bxjsarticle}
\begin{document}
\section{まとめ}
ご清聴ありがとうございました。
\end{document}

何がしたいのか

元来は、BXJS クラスでは、pTeX 系以外のエンジンについては、「どのような日本語組版支援パッケージ/機構を用いるか」については何も定めず、ユーザが自分で明示的行う設定に任せていた。*1しかし、例えば以下のような理由で、「複数のエンジンで通用するテンプレートを用意したい」という場合も考えられる。

  • 自分が普段作成する文書について、必要な拡張機能によってエンジンを使い分けることが多い。
  • 何らかの文書作成システムの下位のコンポーネントとして LaTeX が使われていて、そのエンジンを選択可能にしたい。

これに対応するため、以下のような機能を用意した。

  • 各エンジンについて「標準の」設定を一つずつ用意する;
  • 文書クラスオプション jadriver=standard を指定した場合はその「標準」の設定を適用する;
  • 「標準」の設定においては、和文に関連する設定の様式を統一する。

ただし、この「標準」は「既定」ではない。jadriver=standard を指定しない場合((これは jadriver=minimal と同値になる。))は、従来通り、和文関連の設定はユーザに委ねられる。

標準の設定の内容
  • エンジンが pdfTeX の場合(オプション pdflatex)は以下のプレアンブルと同等になる。bxcjkjatype の既定フォント設定なので、使用フォントは ipaex-type1 のものとなる。

    \documentclass{bxjsarticle} % standard指定なし
    \usepackage[whole,autotilde]{bxcjkjatype}
    


  • エンジンが pTeX の場合(オプション platex)は以下のプレアンブルと同等になる。他のエンジンと異なり、フォントの設定を含んでいない(つまり「いつもの pLaTeX の通り」である)ことに注意。

    \documentclass{jsarticle} % 本家のJSクラス
    


  • エンジンが upTeX の場合(オプション uplatex)は以下のプレアンブルと同等になる。

    \documentclass[uplatex]{jsarticle} % 本家のJSクラス
    


  • エンジンが XeTeX の場合(オプション xelatex)は以下のプレアンブルと同等になる。IPAexフォントを使用する。

    \documentclass{bxjsarticle} % standard指定なし
    \usepackage{zxjatype}
    \setCJKmainfont[BoldFont=IPAexGothic]{IPAexMincho}% 明朝→IPAex明朝
    \setCJKsansfont[BoldFont=IPAexGothic]{IPAexGothic}% ゴシック→IPAexゴシック
    


  • エンジンが LuaTeX の場合(オプション lualatex)は以下のプレアンブルと同等になる。LuaTeX-ja を利用し、luatexja-preset パッケージで IPAex フォントを指定している。

    \documentclass{ltjsarticle} % LuaTeX-ja の JS 互換クラス
    \usepackage[ipaex]{luatexja-preset}
    


なぜエンジンは自動判別でないのか

実のところエンジンを自動判別するのは難しくない。*2オプションとしてエンジン(pdflatex 等)を指定することを要求する仕様になっているのは、「これが無いと、どのエンジンを用いてコンパイルするのが正しいのかが不明になる」のでそれを防ぐためである。どのエンジンでもコンパイルが通るとしても、組版の結果は完全に一致するわけではなく、どれか一つのエンジンでの出力が「正しい組版結果」であるはずである。従って、敢えて「想定のエンジン」を明示させているのである。((なお、jadriver=standard を指定しない場合は従来通りで、エンジンの指定は必須でない。))ちなみに、本家の JS クラスでエンジンが upTeX の場合に uplatex を指定させているのも同じ設計思想による。

とはいっても、用途によっては明示指定が難しい場合もあることが予想される。そういう場合の抜け道として、「エンジンを自動判別にする」ためのオプション autodetect-engine も用意している。

% 文字コードは UTF-8
% pdflatex、platex -kanji=utf8、uplatex、xelatex、lualatex の
% どれでも組版できる!
\documentclass[autodetect-engine,a4paper,jadriver=standard]{bxjsarticle}
\begin{document}
\section{まとめ}
ご清聴ありがとうございました。
\end{document}

このオプションは飽くまでエンジンの明示指定が難しい場合の回避手段だと考えてほしい。

*1:例えば、XeTeX エンジンで日本語組版をする場合、現状では xeCJK (+ zxjatype) が最善と思われるが、それ以外でも、zhspacing(中国語用)、XeTeX.ko(韓国語用)のパッケージでもある程度は日本語の組版ができる。

*2:実際は、内部では自動判別を行っていて、「間違ったオプション」を与えるとエラーになる。