マクロツイーター

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

zxjaナンチャラの現状について語ってみる(2)

前回の続き)

新しいzxjafont(1.1版)の機能を語ってみる

従来の版(0.4版以前)の情報については以下を参照。

xeCJKでもzxjafontできる話

zxjafontのプリセットの指定対象は、例えばipaの場合は以下のようになる。

  • zxjatypeを読み込んだ場合: 和文\rmfamilyが「IPA明朝」、和文\sffamilyが「IPAゴシック」になる。(和文サポートモード
  • それ以外: \rmfamilyが「IPA明朝」、\sffamilyが「IPAゴシック」になる。

zxjatypeがない場合は日本語組版はサポートされないしそもそもフォントに「和文と欧文」の区別もない。しかしzxjafontはそういう状況で使うことも想定されていて、その場合は(区別のない)全体のフォントが設定対象となる。

ところがこれまでzxjafontは「zxjatypeが読まれずxeCJKだけ読み込まれている」状況は想定しておらず、この状況で無理に使うと「日本語のフォントが欧文だけに設定される」という奇妙な動作になっていた。「日本語組版をやりたいならzxjatypeを使っていて当然」であればそうで構わないのであるが、前回に述べたの通り、「日本語組版機能のためのzxjatype」という地位が非常に危ういものになっている。この辺りの事情を踏まえて考慮した結果、1.0版において、「xeCJKが読み込まれた場合も、zxjatype読込時と同様に和文サポートモードを適用する」という仕様変更を行うことにした。

zxjafontで原ノ味フォントできる話

既に前回のzxjatypeの例の中に登場しているが、「原ノ味フォント」を指定するプリセットオプションharanoajiが追加された。

※BXjsclsのクラスを用いたXeLaTeX文書でクラスオプションにjafont=haranoajiを指定した場合、zxjafontが読み込まれてプリセットharanoajiが適用される。

% XeLaTeX文書; UTF-8
\documentclass[xelatex,ja=standard,jafont=haranoaji,
    prefercjk,a4paper]{bxjsarticle}
\begin{document}
①☀っ☁☂☀~っ?\par
❷☃っ☃☃☃~っ!\par
\end{document}

f:id:zrbabbler:20200211062926p:plain
原ノ味フォントしてみた結果(素敵)

これで、ptex-fontmaps、pxchfon、luatexja-preset、zxjafontの全ててharanoajiが使用可能になったことになる。

XeLaTeXでも3ウェイトが使える話

zxjafontパッケージの目的は「(u)pLaTeXのpxchfonパッケージやLuaLaTeXのluatexja-presetパッケージが提供するようなプリセット指定機能をXeLaTeXで実現すること」であるが、特に多ウェイトのプリセットについてはzxjafontは他のパッケージにはない制限があった。それは「明朝・ゴシック各々2ウェイトしか使えない」ということである。

例えば、LuaLaTeXでluatexja-presetパッケージをdeluxe付きで読み込んだ場合、明朝体で細字(通常より細い)を指定する\ltseriesとゴシック体で極太を指定する\ebseriesが使えるようになる。

※(u)pLaTeXでjapanese-otfをdeluxe付きで読み込んだ場合と同じ。

% LuaLaTeX文書; UTF-8
\documentclass[a4paper]{ltjsarticle}
% 源ノフォントを多ウェイトで使う
\usepackage[sourcehan,deluxe]{luatexja-preset}
\begin{document}
% 3ウェイトが使える
☃明朝体で{\ltseries 細字}や中字や\textbf{太字}\par
\sffamily
ゴシックで中字や\textbf{太字}{\ebseries 極太}\par
\end{document}

対して、旧来のzxjafontでは、多ウェイトのプリセットを指定した場合でも、\ltseries\ebseriesは提供されず、またそもそもプリセット自体が中字と太字の2ウェイトしか定義されていなかった。

源ノフォントで3ウェイトしてみる話

1.0版以降のzxjafontでは、luatexja-presetやjapanese-otfと同様に「明朝・ゴシック各々3ウェイト」が使えるようになる。すなわち、\ltseries\ebseriesの命令が提供され、プリセットの定義も3ウェイトになる。

% XeLaTeX文書; UTF-8
\documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk,
    a4paper]{bxjsarticle}
\begin{document}
☃明朝体で{\ltseries 細字}や中字や\textbf{太字}\par
\sffamily
ゴシックで中字や\textbf{太字}{\ebseries 極太}\par
\end{document}

f:id:zrbabbler:20200211111751p:plain
threeweight有効時の出力

この「3ウェイト定義」を有効にするオプションはthreeweightであるが、このオプションは原則的に既定で有効になっているので指定は不要である。逆に、何らかの理由(例えば\ltseries\ebseriesの定義がトラブルを起こす、など)でthreeweightの機能を無効にしたい場合はnothreeweightというオプションを指定1すればよい。

% XeLaTeX文書; UTF-8
\documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk,
    nothreeweight,a4paper]{bxjsarticle}
\begin{document}
☃明朝体で中字や\textbf{太字}\par
\sffamily
ゴシックで中字や\textbf{太字}\par
\end{document}

f:id:zrbabbler:20200211112120p:plain
threeweightを無効にした時の出力

源ノフォントだけど単ウェイトしてみる話

「源ノフォント」を使いたいが、でも「明朝・ゴシック各々1ウェイトしか使わず、かつ明朝の太字をゴシックにする」という「単ウェイトの和文フォント設定」を維持したい場合は、oneweightというオプション(これは昔から存在する)を指定すればよい。

\documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk,
    oneweight,a4paper]{bxjsarticle}
%……あとは直前の例と同じ

f:id:zrbabbler:20200211112200p:plain
oneweight有効時の出力

出力結果をみて判るように、このoneweightを指定したときに明朝とゴシックで実際に使われるウェイトは、多ウェイトプリセットにおいて「中字」のウェイトに相当するものである2

0.7版以降ではboldというオプションが利用できる。これを利用すると、oneweightと同じく「単ウェイトの設定」が維持されるが、そこで使われるゴシックのウェイトがプリセットの「太字」に相当するものになる。これはluatexja-presetやjapanese-otfのboldオプションと同様の機能である。

\documentclass[xelatex,ja=standard,jafont=sourcehan,prefercjk,
    bold,a4paper]{bxjsarticle}
%……あとは直前の例と同じ

f:id:zrbabbler:20200211112220p:plain
bold有効時の出力

まとめ

多ウェイトのプリセットの制御のオプションをまとめると以下のようになる。

  • threeweight: 3ウェイトを使用。これが既定。
  • nothreeweight: 2ウェイトを使用。
  • oneweight: 単ウェイト用設定。
  • bold: 単ウェイト用設定3で、ゴシックを太字にする。

ただしこれらのオプションの実際の仕様は少し複雑で以下のとおりである:

  • threeweightoneweightboldにはそれぞれ無効にするオプションnothreeweightnooneweightnoboldが存在して、独立に有効無効を切り替えられる。
  • フォント設定に関して、3つのオプションの優先度はboldoneweightthreeweightとなる。
  • threeweightが有効の場合、\ltseries\ebseriesが定義される。これはboldoneweightには影響されない。
  • boldoneweightは既定で無効。threeweightは既定で有効であるが、fontspecの版が古い(3ウェイトの設定がサポートされない)場合は無効になる。

その他もろもろ

  • たとえzxjatypeやxeCJKが読み込まれていても無視して和文サポートモードへの移行を抑止するためのオプションを追加。
    • ignorejatype: zxjatype/xeCJKの読込を無視し、和文サポートモードを無効にする。
    • noignorejatypeignorejatypeの否定。
  • 90jisjis2004の両方を否定して既定状態に戻すオプションnojisshapeを追加。
  • haranoaji以外の新設プリセットオプション:
    • nopreset和文フォントのプリセット設定を行わない。
    • Mogaフォント系のプリセットを整理した(mogaN-90を追加)。恐らく現在はMogaフォントの需要はないと思われるので、詳細は笑楽する。
  • luatexja-preset互換のオプション別名を追加。
    • deluxenooneweightの別名
    • nodeluxeoneweightの別名
    • jis9090jisの別名
    • 2004jisjis2004の別名
    • match: 何もしないオプション
    • noembednopresetの別名。
  • ptex-fontmapsとの互換のためのプリセット別名を追加。
    • kozukakozuka-proの別名
    • morisawamorisawa-proの別名
    • hiraginohiragino-proの別名
  • 0.3版で非推奨となったプリセットを0.5版で廃止した。
    • kozuka4kozuka6kozuka6nhiraginoms-dxipa-dxhiragino-dxが廃止。

  1. BXjsclsクラスのjafontオプションによりzxjafontが読み込まれている場合、zxjafontにオプションを指定するにはクラスオプション(グローバルオプション)として指定すればよい。

  2. 厳密にいうと、プリセットの種類によってはゴシックについて「oneweight指定時専用のウェイト」が使われる。例えば、sourcehanプリセットではゴシックの中字は「Source Han Sans Regular」であるが、oneweight指定時のゴシックは「Source Han Sans Medium」であり、これは「Regular」よりも若干太い。

  3. luatexja-presetと異なり、zxjafontのboldはそれ自体が単ウェイト用設定を有効化する。