マクロツイーター

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

pxchfon の新しいやつ(v1.0a)

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

プリセット“yu-win10+”でもっと游フォントできる話

Windows 10 搭載の游フォントを使うマップ設定を pxchfon で指定する場合のプリセットは yu-win10 である。しかし、この設定には引用符 “ ” ‘ ’ の出力が不正になるという欠点がある。

% upLaTeX文書; UTF-8
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[yu-win10]{pxchfon}
\begin{document}
%“ ”が正しく出力されない。
{\TeX}は“アレ”、\textgt{☃は“非アレ”。}
\end{document}

游フォントの(既定で出力される)引用符は全角幅でない。その上、Windows の游フォントは(macOS のものと異なり)CID-keyed でないので、「全角幅の引用符を指定して出力する」ことができない。従って旧来の dvipdfmx では全角幅の引用符を出力することは困難であった。

例によって、新しい dvipdfmx であれば、この問題に対処できる。それを実装したのが、新しいプリセットである yu-win10+ である。(例によって upLaTeX 専用である。)

% upLaTeX文書; UTF-8
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[yu-win10+]{pxchfon}
\begin{document}
%“ ”があっても大丈夫!
{\TeX}は“アレ”、\textgt{☃は“非アレ”。}
\end{document}

yu-win10+ だと正常に出力されている。一般人が見る限りは……。

でもやっぱりごまかしている話

……実は、yu-win10+ の出力も完全ではない。「フォントな人」が見れば直ちに判るだろうが、游明朝の引用符が游ゴシックになっている。これは「元の(引用符以外の)フォントと別のフォントに振る必要がある」という実装上の制限を回避するためであり、具体的には、游明朝と游ゴシックの両方の「引用符のフォント」を“Yu Gothic UI”に振っているのである。*1

フォントマップファイルダンプ出力機能

「フォントマップファイルダンプ出力機能」を使うと、pxchfon が設定した「現在のフォントマップ」をマップファイルの形で出力することができる。

単純フォントマップファイルダンプ出力(dumpmap オプション)

例えば、pxchfon を利用して、以下のように「和文フォントを全部『HG創英角ポップ体』にする」設定を行ったとする。

[favorite.tex]

% upLaTeX文書
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[noalphabet]{pxchfon}
\setminchofont[0]{HGRPP1.TTC}% HG創英角ポップ体!!
\setgothicfont[0]{HGRPP1.TTC}% HG創英角ポップ体!!
\begin{document}
\section{なんか書いてみる}
吾輩は☃である。意味はまだ無い。
\end{document}

そして、この設定が心底気に入って、「和文フォントのデフォルトをHG創英角ポップ体にしたい!」と思ったとする。しかし、デフォルトの設定をするためには、フォントマップの内容を記したファイルが必要である。

フォントマップファイルダンプ出力機能を利用すると、所望のマップファイルを簡単に作成できる。pxchfon に dumpmap オプションを追加する。

\usepackage[dumpmap,noalphabet]{pxchfon}

この状態で favorite.texコンパイルすると、favorite.map というファイルが出力される。

% a.map
uprml-h UniJIS-UTF16-H :0:HGRPP1.TTC
uprml-v UniJIS-UTF16-V :0:HGRPP1.TTC
uprml-hq UniJIS-UCS2-H :0:HGRPP1.TTC
upgbm-h UniJIS-UTF16-H :0:HGRPP1.TTC
upgbm-v UniJIS-UTF16-V :0:HGRPP1.TTC
upgbm-hq UniJIS-UCS2-H :0:HGRPP1.TTC
urml UniJIS-UTF16-H :0:HGRPP1.TTC
urmlv UniJIS-UTF16-V :0:HGRPP1.TTC
ugbm UniJIS-UTF16-H :0:HGRPP1.TTC
ugbmv UniJIS-UTF16-V :0:HGRPP1.TTC
% EOF

従って、後は「普段の upLaTeX のコンパイルのワークフロー」においてこの favorite.map が使用されるように適切な設定を行えばよい。

TeX Live の場合は、後述の「TeX Live 用フォントマップファイルダンプ出力」機能を用いた方が便利である。

  • favorite.map を「dvipdfmx が見える場所」に配置する。
    (例えば `$TEXMFHOME/fonts/map/dvipdfmx/)
  • dvipdfmx の実行において favorite.map が読まれるようにする。
    • ビルドツールや統合環境の設定において、dvipdfmx のオプションに -f favorite.map が追加されるようにする。
    • W32TeX の場合、dvipdfmx の設定ファイル($SELFAUTODIR/texmf-dist/dvipdfmx/dvipdfmx.cfg(($SELFAUTODIRW32TeX をインストールしたディレクトリ。)))の末尾に f favorite.map を追記する。
      TeX Live では原則的にこの作業を行ってはいけない。

※「単純」の方のダンプ出力は、本当に当該の文書で有効になっているマップ行だけを出力する。例えば、先の favorite.tex の場合、upLaTeX 文書でありかつ japanese-otf を使っていないため、pLaTeX の標準和文フォント(rml など)や japanese-otf の和文フォントに対するマップ行は含まれていない。逆に、有効になっているマップ行は何でも出力するので、例えば、alphabet が指定された場合は欧文フォント(r-cfjar-r-@PXcjk0@ など)のマップ行も出力*2し、また \usefontmapline で直接指定されたマップ行も出力する。

TeX Live 用フォントマップファイルダンプ出力(dumpmaptl オプション)

dumpmap オプションは全てのマップ設定を単一のファイルに書き出すのに対し、こちらの dumpmaptl オプションは TeX Live の kanji-config-updmap ユーティリティに適した形式の複数のファイルに出力する。従って、この機能を利用して「kanji-config-updmap 用のカスタム設定」(参照)を簡単に作成できる。

例えば、次のように、sourcehan プリセットを指定してさらに dumpmaptl オプションを追加する。

\documentclass[a4paper]{jsarticle}
\usepackage[sourcehan,dumpmaptl]{pxchfon}
\begin{document}
アレ。
\end{document}

この文書をコンパイルすると、以下の 4 つのマップファイルが出力される。

  • ptex-mysourcehan.map
  • uptex-mysourcehan.map
  • otf-mysourcehan.map
  • otf-up-mysourcehan.map

この後、以下の手順を行うことで、「pxchfon の sourcehan と同じ設定」をデフォルトに設定することができる。

  • マップファイルを「dvipdfmx から見える場所」に配置する。
    (例えば $TEXMFLOCAL/fonts/map/dvipdfmx/*3置いて、mktexlsr を実行する。)
  • kanji-config-updmap-sys mysourcehan を実行する。

※「TeX Live 用」の方のダンプ出力は、当該の文書で実際に有効であるかに関わらず、ユーザが行った設定に対応するような、kanji-config-updmap の様式に従ったマップファイルを出力する。kanji-config-updmap の管轄でないもの(欧文フォントや \usefontmapline)はどこにも出力されない。

ドライバオプションできる話

pxchfon は本質的に dvipdfmx しかサポートしない。*4このためドライバオプションをサポートしていなかった。しかし現在の LaTeX の使用では「ドライバオプションをグローバルに指定する」ことが一般的になりつつあるので、グローバルにドライバが指定された場合には「そのドライバ指定に対して最適な動作」を行うのが望ましい。

そこで、pxchfon においてもドライバオプションをサポートした。

  • dvipdfmx: 従来通り、dvipdfmx に依存する動作を行う。
  • dvipsdvioutxdvinodvidriver: dvipdfmx に依存する動作を回避する。主要機能が無効になるため、実質的に何の役にも立たなくなる。*5

既定値は dvipdfmx なので、ドライバオプションを指定しない場合の挙動は何も変わらない。主な目的がグローバルオプションに対応することであるので、「これからは pxchfon にドライバオプションを指定すべきだ」と主張しているわけではない。

*1:「sourcehan の設定で一部の日本語論理フォントを韓国語・中国語のフォントに振っている」というのと同様の話。

*2:ただし、“pxchfon 用の欧文フォント”は pxchfon を読みこんだ時のみに使われるものなので、そのマップ行を当該の文書の外で適用してもあまり意味がない。

*3:TeX Live では原則的にユーザレベルよりもシステムレベル設定を用いた方がよいので$TEXMFLOCAL` にした。

*4:ただし、マニュアルを読めば判るように、「フォントマップ設定が効かないことを前提にして、プレビュー目的で敢えて dvipdfmx 以外の DVI ウェアで DVI を扱う」ことは想定されている。

*5:先の注釈で述べたような「プレビュー用途」の場合、「dvipdfmx 専用の DVI 命令が含まれることによる無用な警告が出なくなる」というメリットはあるだろう。