Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2017-06-24

新しい pxbabel についての話

この記事では、pxbabel パッケージ(PXbase バンドル)の新版(1.1 版)における新しい機能について解説する。

pxbabel って何

要するに、こういうことをするためのもの。

\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[schinese,japanese]{pxbabel}
\begin{document}
『骨』は簡体字では『%
\foreignlanguage{schinese}{}%
』と書く。
\end{document}
f:id:zrbabbler:20170622120801p:image

日本語と中国語では別のフォントを使う必要があるわけだが、そのフォントの切替を「Babel における言語の切替」というインタフェースで行えるようにしたのが pxbabel パッケージである。(pxbabel は内部で babel を読み込んでいる。)

詳しい解説は奥底のページにある。ただしここの説明は古い版に基づくものである。

新しいやつと古いやつは読込方法が違う

新版ではパッケージの読込の方法がより簡単なものに変更されている。

新しいやつの場合

要するに「babel の代わりに pxbabel を読み込む」という形になる。pxbabel を使うことにより 4 つの CJK 言語(japanese・korean・schinese・tchinese)が“指定できるようになる”ため、CJK 言語およびその他の Babel の言語のうち、自分が使いたいものを列挙すればよい。babel での規則と同じく、一番最後に書いたものが基底言語(その文書のメインの言語で文書開始時に有効になっている)になる。

  1. 例えば“韓国語文書”を作る場合は:

    \usepackage[korean]{pxbabel}
    
  2. 例えば“繁体字中国語を含む日本語の文書”を作る場合は:

    \usepackage[tchinese,japanese]{pxbabel}
    
  3. 例えば“英語と日本語を含むフランス語文書”を作る場合は:

    \usepackage[english,japanese,french]{pxbabel}
    
  4. 例えば“エスペラントと日本語を含む簡体字中国語文書”を作る場合は:

    \usepackage[esperanto,japanese,schinese]{pxbabel}
    
古いやつの場合

これに対して、旧版は「babel の後で pxbabel を読む」という手順になっていた。

  • まずは非 CJK 言語のオプションを指定して babel を読み込む。(ここで最後に書いたものが基底言語になる。)
  • その後に pxbabel を読み込むと、4 つの CJK 言語が(常に)有効になる。ここで CJK 言語を基底言語に変えたい場合は、pxbabel のオプションmain=<言語名> を指定する。

先の節で例に挙げたパターンは、旧版では以下のようになる。

  1. 韓国語文書”を作る場合は:

    \usepackage[english]{babel}
    \usepackage[main=korean]{pxbabel}
    
    ※CJK 言語は常に有効なので korean の指定は不要なことに注意。
    ※babel を言語オプション無しで読み込むことは許されないので、取りあえずダミーとして english を指定する。
  2. 繁体字中国語を含む日本語の文書”を作る場合は:

    \usepackage[english]{babel}
    \usepackage[main=japanese]{pxbabel}
    
    ※tchineseは“どこにも書かない”ことになる。
  3. “英語と日本語を含むフランス語文書”を作る場合は:

    \usepackage[english,french]{babel}
    \usepackage{pxbabel}
    
    ※pxbabel に main がないので babel で決定した基底言語がそのまま保持される。
  4. エスペラントと日本語を含む簡体字中国語文書”を作る場合は:

    \usepackage[esperanto]{babel}
    \usepackage[main=schinese]{pxbabel}
    
互換性の心配は無用

ただし、旧版の仕様に従った文書コンパイル結果が変わってしまってはいけないので、以下のようにして後方互換性を保持している。

  • babel と pxbabel が別個に読み込まれた場合は旧版の仕様に従う。つまり、main キーが指定されない場合は、pxbabel は基底言語を変更しない。
  • 新版でも実際には 4 つの CJK 言語全てが有効になっている。(ただし pxbabel のオプションに明示指定することが推奨される。)
  • main キーで基底言語を明示指定する方法は新版でも有効である。main=french のように非 CJK 言語を指定することも可能。*1

キャプション言語の扱い(caption オプション

Babel で日本語(などの CJK 言語)を扱うときの顕著な問題点の一つが「キャプション言語の切替」の問題である。これは先に挙げた奥底の記事の別の箇所で詳しく論じられている。

新版では、キャプション言語の切替の挙動は caption というオプションキーで制御できる。

caption の既定値は基底言語により異なり以下のようになる。*4

  • 基底言語が非 CJK 言語になる場合は switch、つまり Babel の仕様が保持される。
  • 基底言語が CJK 言語になる場合は main となる。pxbabel が追加した CJK 言語はキャプション文字列の定義を含んでいないため、文書クラスでの定義を利用する必要があるからである。

従って、pxbabel を利用して CJK 言語が基底となる文書を作成する場合は、文書クラスは当該の言語のためのものを選ぶ必要がある。先の例でいうと、1 では韓国語用、2 では日本語用、4 では簡体字中国語用の文書クラスを用いる必要がある。*5

bxorigcapt パッケージ

ちなみに、「Babel は使いたいが、キャプション文字列文書クラスで決めたものをそのまま使いたい」という場合、bxorigcapt パッケージを使うという手段もある。


補足的な何か。

*1:ちなみに、これは偶然であるが、比較的最近の Babel には main キーで基底言語を明示指定する機能が追加されている。

*2otherlanguage*-形はキャプション言語の切替を行わない。

*3:この“default”という名称は「昔の bxbase の \bxmainlanguageデフォルトの動作」であることに由来する。

*4:この仕様は古い版と新しい版の間で変更はない。

*5:通常、CJK 言語の各々と非 CJK 言語の間で「文書クラスをキャプションだけ書き換えて融通する」ということは、レイアウトが大きく異なるゆえ不可能である。従って、CJK 言語が基底の場合は「文書クラスの文字列を保持する」のが最適なのである。

2017-06-23

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}
f:id:zrbabbler:20170618000959p:image

フォントの(既定で出力される)引用符は全角幅でない。その上、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}
f:id:zrbabbler:20170618000956p:image

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}
f:id:zrbabbler:20170617235923p:image

そして、この設定が心底気に入って、「和文フォントデフォルト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*2)の末尾に f favorite.map を追記する。
      TeX Live では原則的にこの作業を行ってはいけない。

※「単純」の方のダンプ出力は、本当に当該の文書で有効になっているマップ行だけを出力する。例えば、先の favorite.tex の場合、upLaTeX 文書でありかつ japanese-otf を使っていないため、pLaTeX の標準和文フォント(rml など)や japanese-otf の和文フォントに対するマップ行は含まれていない。逆に、有効になっているマップ行は何でも出力するので、例えば、alphabet が指定された場合は欧文フォントr-cfjar-r-@PXcjk0@ など)のマップ行も出力*3し、また \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/*4置いて、mktexlsr を実行する。)
  • kanji-config-updmap-sys mysourcehan を実行する。

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

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

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

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

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

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

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

*2$SELFAUTODIRW32TeXインストールしたディレクトリ

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

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

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

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

2017-06-18

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 オプション」という謎のオプションが載っている。そして「和文ドライバパラメタの値を設定する」という説明が載っているが具体的な使い方は何も書いていない。

この「和文ドライバパラメタ」がある主な目的は「第三者が和文ドライバを実装する場合の便宜」のため*1であるので、従来は BXjscls 自体が提供する和文ドライバでは japaram を全く使っていなかった。しかし今回の版からは標準ドライバが japram を利用することになる。*2

標準和文ドライバの japaram

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

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

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

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

2004JIS 字形したい話

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

これを解決するために、和文ドライバパラメタ 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}
f:id:zrbabbler:20170618231204p:image

ここでオプション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}
f:id:zrbabbler:20170618231201p:image

※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}

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

和文ドライバパラメタ font

和文文書入力補助の話

\jafontsize 命令

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

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

を実行すると、和文の 1zw が 18Q に等しくなるようにフォントサイズが設定される。(行送りの解釈は \fontsize と同じで、この場合は 28H になる。)ちなみに、\jafontsize引数では Q/H 単位が全エンジンで使用可能である。*5

\> 命令

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

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

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

*1:和文ドライバのコードが実行される段階では、クラスオプションの解析は既に完了しているため、独自の和文ドライバを実装する者がそれ用の独自のパラメタを用意したいという場合に、クラスオプションとして実装することはできない。一方で、japaram の引数に渡した文字列はそのまま \jsJaParam というマクロに格納されるため、ドライバ実装者はその内容を好きなように解釈できる。

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

*3:グローバルオプションを用いてパッケージのオプションを指定するという手もあるが、2004JIS 優先のオプションの名前は pxchfon では prefer2004jis、luatexja-preset では jis2004 と異なるため、結局エンジン非依存の書き方はできない。

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

*5:BXJS クラスの一般規則としては、Q/H 単位を全エンジンで使いたい場合は長さ命令の \jQ/\jH を用いる。

2017-06-17

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

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

ノアレなプリセット

※この機能は最新の dvipdfmx(20170318 版以降;TeX Live 2017 以降に含まれるもの)を必要とする。

以下のプリセット設定を追加した。

  • sourcehan: Source Han Serrif(源ノ明朝)/Source Han Sans(源ノ角ゴシック)の言語別(非サブセット)OTF 版。
  • sourcehan-otc: Source Han Serrif/Source Han Sans(Super でない)OTC 版。
  • noto: Noto Serif CJK/Noto Sans CJK の言語別(非サブセット)OTF 版。
  • noto-otc: Noto Serif CJK/Noto Sans CJK の(Super でない)OTC 版。

既に当ブログで何度が触れているように、源ノ明朝などの“AJ1 でない OpenType フォント”は DVI ウェアで扱うのが面倒なフォントである。これらのプリセット設定は dvipdfmx の新機能を利用して実現しているのだが、pxchfon の機能に完全には対応できず、次のような重要な制限がある。

  • upLaTeX 専用であり、pLaTeX では使えない。
  • \CID 命令や ajmacros の大半の機能(\ajMaru\ajLig など)は使えない。

この機能の詳細については、別の記事で詳しく解説したので、そちらを参照してほしい。

% upLaTeX文書; UTF-8
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[deluxe,jis2004]{otf}
\usepackage[sourcehan-otc,prefer2004jis]{pxchfon}
\begin{document}
{\TeX}と☃は\textbf{一切}関係ありません。

\sffamily
{\TeX}と☃は\textbf{一切}関係ありません。

%{\TeX}は\○ア\○レ % これはダメ
\end{document}
f:id:zrbabbler:20170616125948p:image
種明かし的な何か

以前の記事を読んだ人なら容易に想像できる通り、「directunicode 機能」を使っている。この directunicode 機能が依拠しているのが dvipdfmx のマップ指定における“Unicode 直接”指定であるが、これが新しい dvipdfmx で大きく機能拡張されている。

  • 縦組フォントで正しく縦組用の字形が使われる。
  • OpenType 属性が追加で指定できる。こにより、90JISと2004JISの字形の使い分けが可能になる。

従って、新しい dvipdfmx では、普通に upLaTeX および japanese-otf パッケージを利用する分には、“Unicode 直接”指定が十分に使い物になるといっていいだろう。(もちろん、\CID 命令などの“AJ1 に直接に依存する機能”は諦めるしかないのだが。)

これを受けて pxchfon でも方針転換を図っている。すなわち、これまで“特殊な設定”の扱いであった“Unicode 直接”指定をもっと積極的に使っていこうと考えている。「源ノアレ」用のプリセットはその方針に沿ったものである。

unicode*”オプション

前述の方針に沿って、従来の「directunicode* オプション」を dvipdfmx の新機能を活用して機能強化した「unicode* オプション」を新設した。*1現状の仕様では、新しい unicode*directunicode* と以下の点が異なる。

※なお、新しい dvipdfmx を使う場合は、directunicode(*) でも unicode* でも縦組時の字形が正しいものになる。

従って、この unicode* オプションを利用すれば、源ノアレ系以外の“AJ1 でない OpenType フォント”が指定できるようになるはずである。(ただし sourcehan プリセットと同様に upLaTeX 限定で \CID は使えない。)

% upLaTeX文書
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[noalphabet,unicode*,prefer2004jis]{pxchfon}
\setminchofont[0]{YuMincho.ttc}% macOS Sierraの游明朝(YuMincho Medium)
%...(以下略)

また、unicode* オプションは TrueType フォント(OpenType-TTF)についても有効であり、この場合も「90JIS/2004JIS 字形の切替が有効になる」という恩恵が受けられる。(この場合は、Unicode 以外のフォントunicode* 指定の影響を受けない。)

% upLaTeX文書
\documentclass[uplatex,a4paper]{jsarticle}
% 'prefer2004jis'非指定なのでIPAexフォントが90JIS字形になる.
% ※'unicode*'非指定の場合は'prefer2004jis'の指定は無視され,
% 常に"IPAexフォント側の既定"である2004JIS字形になる.
\usepackage[ipaex,unicode*]{pxchfon}
\usepackage{otf}
\begin{document}
葛餅で蓬餅で、かつ\textgt{煎餅}{\TeX}は\○ア\○レ %(従来通り)OK
\end{document}
f:id:zrbabbler:20170616125945p:image

その他もろもろ

  • 非推奨のプリセットを廃止した(エラーを出す)。
  • pxjafont パッケージを非推奨とする。

*1unicode* の方は新しい dvipdfmx を必要とするため、従来の directunicode(*) とは別のオプションにしている。もはや“特殊な設定”の位置付けでないので短い名前を選んだ。なお、* のない「unicode」は将来の拡張のために残している。

2017-06-12

graphicxが新しくなるとPDF画像がアレ(注意!)

要するに

明日(6/13)以降に TeXアップデートすると、graphics/x + dvipdfmx で挿入した PDF 画像がアレになる可能性がある。くれぐれも注意。

参照