マクロツイーター

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

BXjscls の新しいやつ(v1.5c)

W32TeXTeX Live では既に更新されている。

※特に断らない限り、この記事では標準(standard)和文ドライバを前提にする。

“jafont=auto”指定がちゃんと動く話

BXJS クラスでは jafont オプションキーで和文フォントのプリセットが選択できる。これに関する試験的な機能として、jafont=auto という指定がある。詳しい説明は以前の記事を参照してほしいが、要するに、TeX Live において「“(u)pLaTeX の既定の設定”を他のエンジンで擬似的に適用する」ためのものである。

例えば、以下の設定コマンドを実行して (u)pLaTeX和文フォントを小塚フォントに設定していたとする。

kanji-config-updmap-sys kozuka-pr6n

その場合、以下の文書クラス指定の LuaLaTeX 文書の和文フォントも小塚フォントになる。

% LuaLaTeX文書
\documentclass[lualatex,a4paper,ja=standard,jafont=auto]{bxjsartible}
updmap の仕様拡張への対応

前述の記事の解説にある通り、jafont=auto の処理では「現在設定されている updmap パラメタ kanjiEmbed の値」を読み取っている。

ところが、2017 年 1 月の「jfontmaps の中国語・韓国語対応」(参考)にあたって、「日本語用プリセットの名前」を著す updmap のパラメタの名前が kanjiEmbed から jaEmbed に変更されている。従って、これ以降に TeX Live をインストールした、あるいは、updmap(または kanji-config-updmap)で和文フォントの設定を行った場合に、kanjiEmbed ではなく jaEmbed が使われることになり、BXJS クラスの jafont=auto が機能しなくなっていた。

このため、新しい版では「kanjiEmbed と jaEmbed の両方のパラメタを調べる」という動作に修正した。

(u)pLaTeX 上の動作

(u)pLaTeX 上で jafont=auto の指定を行った場合は、jafont 無指定の場合と同じ動作になるべきである。しかし実際には、「auto を pxchfon に渡そうとしてエラーになる」という間抜けな動作になっていた。

新しい版では想定通りの動作を行うようになる。

和文ドライバパラメタ(japaram オプション)の話

旧来の版の BXJS クラスのマニュアルを読むと、「japaram オプション」という謎のオプションが載っている。そして「和文ドライバパラメタの値を設定する」という説明が載っているが具体的な使い方は何も書いていない。

この「和文ドライバパラメタ」がある主な目的は「第三者和文ドライバを実装する場合の便宜」のため((和文ドライバのコードが実行される段階では、クラスオプションの解析は既に完了しているため、独自の和文ドライバを実装する者がそれ用の独自のパラメタを用意したいという場合に、クラスオプションとして実装することはできない。一方で、japaram の引数に渡した文字列はそのまま \jsJaParam というマクロに格納されるため、ドライバ実装者はその内容を好きなように解釈できる。))であるので、従来は BXjscls 自体が提供する和文ドライバでは japaram を全く使っていなかった。しかし今回の版からは標準ドライバが japram を利用することになる。*1

標準和文ドライバの japaram

標準(standard)和文ドライバにおいては、japaram は以下の形式をとる。

japaram={<キー>=<値>,<キー>=<値>,...}

japaram の値の中の各々のキー値ペアのことを「和文ドライバパラメタ」という。

以降に、今回の版で設けられた和文ドライバパラメタについて解説する。

2004JIS 字形したい話

BXJS クラスの jafont オプションの実装には pxchfon や luatexja-preset などの外部のパッケージの機能を用いている。一方、これらのフォントプリセット設定のパッケージには「2004JIS 字形を優先する」ためのオプションが備わっている。ところが BXJS クラスにはそのようなオプションを有効化する手段を持っていない。このため、2004JIS 字形を優先したいという場合には jafont 指定は使えず、結局エンジンに依存する書き方が必要になっていた。((グローバルオプションを用いてパッケージのオプションを指定するという手もあるが、2004JIS 優先のオプションの名前は pxchfon では prefer2004jis、luatexja-preset では jis2004 と異なるため、結局エンジン非依存の書き方はできない。))

これを解決するために、和文ドライバパラメタ jis2004 を用意した。このパラメタの値を真(true)にすると、以下の動作が起こる。これにより、「2004JIS 字形の優先」の機能があるほとんどのパッケージについてその機能が有効になる。

  • グローバルオプション jis2004 が追加される。
    • これにより、例えば luatexja-preset や japanese-otf に jis2004 が渡るようになる。
  • pxchfon と pababel に prefer2004jis を渡す。

以下で、小塚フォントを用いた例を示す。以下の文書では何も指定していないため 90JIS 字形になる。

% pLaTeX文書
\documentclass[platex,dvipdfmx,a4paper,
  ja=standard,jafont=kozuka-pr6n]{bxjsarticle}
\usepackage[noreplace]{otf}
\begin{document}
葛飾区は\UTF{845B}飾区!
\end{document}

ここでオプションに japaram={jis2004} を追加すると、2004JIS 字形に変わる。

% pLaTeX文書
\documentclass[platex,dvipdfmx,a4paper,
  ja=standard,jafont=kozuka-pr6n,japaram={jis2004}]{bxjsarticle}
\usepackage[noreplace]{otf}
\begin{document}
葛飾区は\UTF{845B}飾区!
\end{document}

※japaram 内の jis2004=true は単に jis2004 と書いてよい。
※japanese-otf で noreplace を指定しているため、直接入力の〈葛〉は pxchfon の prefer2004jis\UTF 入力の〈葛〉は japanese-otf の jis2004 の設定に従う。

和文ドライバパラメタ jis2004
  • jis2004=true(または jis2004): 各種パッケージの「2004JIS 字形を優先させる設定」を有効化する。
  • jis2004=false(既定): jis2004=true の否定。

フォント指定のパッケージにオプションを渡したい話

先の jis2004 の件と同様の話であるが、pxchfon 等のプリセット指定パッケージの機能を積極的に用いるために追加のオプション(例えば relfont)を入れたいとする。ところがこの場合にクラスの jafont オプションを用いると、クラス内で pxchfon が読み込まれてしまうので、後から relfont を追加することができなくなる。

\documentclass[uplatex,dvipdfmx,a4paper,
    ja=standard,jafont=ms]{bxjsarticle}
% ↓既に pxchfon は読込済なのでダメ
\usepackage[ms,relfont]{pxchfon}

この場合、もちろん jafont を使わなければよい。元々 jafont は「エンジン非依存の設定方法」を与えるために存在するものであり、「pxchfon のオプションを直接指定する」というのはエンジン依存の指定を使うことに他ならない。だからこの場合に無理して jafont を使う理由はないだろう。

\documentclass[uplatex,dvipdfmx,a4paper,
    ja=standard]{bxjsarticle}% jafont を外した
\usepackage[ms,relfont]{pxchfon}% OK

とはいっても、jafont が使えた方が便利な場面(主に LaTeX ソースが自動生成される場合)もあるかも知れないので、「プリセット指定パッケージに追加で渡すオプション」を指定するための和文ドライバパラメタ font を用意した。これを利用すると、先の例は次のように書ける。

\documentclass[uplatex,dvipdfmx,a4paper,
    ja=standard,jafont=ms,japaram={font={relfont}}]{bxjsarticle}

通常の場面では無理して使うほどのものではないだろう。*2

和文ドライバパラメタ font
  • font={<オプション>,...}: プリセット指定パッケージ(エンジンにより異なる;pxchfon や luatexja-preset 等)に追加で渡すオプション列を指定する。

和文文書入力補助の話

\jafontsize 命令

LaTeX 標準の \fontsize 命令の変種であり、和文規準でフォントサイズを指定する。例えば

% 文字サイズ18Q、行送り28H
\jafontsize{18Q}{28H}\selectfont

を実行すると、和文の 1zw が 18Q に等しくなるようにフォントサイズが設定される。(行送りの解釈は \fontsize と同じで、この場合は 28H になる。)ちなみに、\jafontsize の引数では Q/H 単位が全エンジンで使用可能である。((BXJS クラスの一般規則としては、Q/H 単位を全エンジンで使いたい場合は長さ命令の \jQ/\jH を用いる。))

\> 命令

\> を実行すると和欧文間空白が挿入される。エンジンの仕様上制限のために本来必要な和欧文間空白が入らないときの対策に用いる。

\documentclass[lualatex,a4paper,ja=standard]{bxjsarticle}
\begin{document}
% 自動的に入らないので \> で和欧文間空白を入れる
\underline{\TeX}\>はアレ!
\end{document}

LaTeX には \> という命令はないが、plain TeX では \> は数式中の空白(LaTeX\: と同等)を表す。なので実際には LaTeX でも「plain 互換の \>」は定義されていて、これを利用している人もいるだろう。そこで、BXJS の \> は数式中では“元の動作”に戻るようになっている。

*1:方針としては、「和文ドライバごとに解釈が異なる可能性があるパラメタ」(で jafont 以外のもの)が japaram の中に割り当てられる。

*2:将来に例えば「pxchfon と luatexja-preset で何らかの共通のオプションが使えるようになる」といった状況になれば、それなりに有用になるかも知れない。