pTeX での和文フォントの扱い

参考文献

前提知識

8 ビット欧文 LaTeX の NFSS (ユーザ命令、できればパッケージ用命令も)については既知とします。

TeX レベルインタフェース

「欧文」「和文横書」「和文縦書」で独立管理。つまり「現在フォント」が 3 つ別々にあるということ。

  • \font\tenrm=cmr10
    \temrm は「現在の欧文フォントを cmr10 に切り替える」命令になる。
  • \jfont\tenmin=jis
    \tenmin は「現在の和文横書フォントを jis に切り替える」命令になる。
  • \tfont\tenminv=jis-v
    \tenminv は「現在の和文縦書フォントを jis-v に切り替える」命令になる。

いずれも = の右辺にあるのは TFM(JFM)名。 こうして定義される \tenrm 等のことを「fontdef トークン」という。

ただし、TFM が「欧文」「和文横書」「和文縦書」のいずれであるかは pTeX で判断されるので、

\font\tenrm=cmr10
\font\tenmin=jis
\font\tenminv=jis-v
と全部 \font で書いてもよい(実は全部 \jfont で書くことすら可)。 この 3 行は前掲の 3 行と全く等価である。 ただし、\font には前に \the を付して現在の欧文フォントの fontdef トークンの名に展開されるという機能もあり、 これは \jfont\tfont では動作が異なる (「現在の和文フォントの…」になる)。

pLaTeX の NFSS

欧文と和文を別個に管理する。 和文の横書と縦書は、設定の際は別個に行うが、 使用の際は連動するようになっている。

ユーザ命令

(共用) (欧文用) (和文用)
\fontencoding \romanencoding \kanjiencoding
\fontfamily \romanfamily \kanjifamily
\fontseries \romanseries \kanjiseries
\fontshape \romanshape \kanjishape
\usefont \useroman \usekanji
\selectfont

「共用」のコマンドの実際の動作は以下の通り。

  • \fontencoding / \fontfamily / \usefont : エンコーディング・ファミリの値により、 どちらに対する切替かを判断する。 (エンコーディングの値は、多分、 縦書と横書のどちらを指定してもいいのだと思う。)
  • 残り : 欧文と和文の両方を設定する。

総称ファミリの命令は:

  • 欧文 : \rmfamily / \sffamily / \ttfamily
  • 和文 : \mcfamily / \gtfamily

これらも原則的には欧文・和文の一方のみに適用される。 ただし、一部の文書クラスでは、 「 \sffamily の中に \gtfamily に相当する処理を含める」 ことにより総称ファミリが連動するように再定義されている。

パッケージ用命令

(欧文) (和文)
\DeclareFontEncoding \Declare{Yoko|Tate}KanjiEncoding
\DeclareFontEncodingDefaults \Declare{Yoko|Tate}KanjiEncodingDefaults
\KanjiEncodingPair
\DeclareFontFamily \DeclareKanjiFamily
\DeclareFontSubstitution \DeclareKanjiSubstitution
\DeclareErrorFont \DeclareErrorKanjiFont
\DeclareFontShape (←共用)

~Encoding~Family~Substitution の登録データは本当は内部では一緒になっている。 コマンドを分けているのは、実は、 上述の「共用」ユーザ命令のために、 指定のエンコーディングやファミリが欧文・ 和文のいずれに属するのかを判断するため(だと思う)。

従属欧文の設定

pLaTeX の NFSS には 「和文フォントとセットで使う欧文フォントの組」 を予め設定しておいて簡単に呼び出せるようにするという機能がある。 ただし完全に自動ではない。 (使われいるのか?)

\DeclareRelationFont{JY1}{hiram}{m}{}{T1}{ahiram}{m}{}
を予め実行しておいて、和文フォントを JY1/hiram/m/n にするような \font~\kanji~)設定の後に行うべき \selectfont の前に \userelfont を実行すると、 欧文フォントが T1/ahiram/m/n に切り替わる。 (\userelfont が有効になるのはその直後の \selectfont でのみである。) 具体的には次のような命令を定義することを想定すればよい。
\DeclareRobustCommand\hiramfamily{%
  \kanjifamily{hiram}\userelfont\selectfont}