*和文フォントを使う仕組み [#g9ceff7e]

[TODO] [[OTFパッケージ:http://oku.edu.mie-u.ac.jp/~okumura/texfaq/otf.html]]
についても含めなくては。

**pTeX で和文を使う仕組み [#sd4a1716]

pTeX レベルでは

 \font\foo=jis
 {\foo あいうえお}

と書くと, pTeX は jis.tfm
という和文フォントメトリック(JFM)ファイルを参照して文字を並べ,その結果を dvi
ファイルに書き出します。
pTeX は実際の文字の形を収めたファイルにはアクセスしません。
dvi ファイルには jis というフォント名(tfm 名)だけが入ります。

この dvi ファイルの処理はドライバに依存します。

**dvipdfmx [#h017267f]

dvipdfmx では rml といった名前に至るまでは dvips と同じです。
ここで texmf-dist/dvipdfmx/config/dvipdfmx.cfg に f cid-x.map
のように指定してあるマップファイルを見に行き,そこにたとえば

 rml  H Ryumin-Light

とあれば,Ryumin-Light という名前だけが入ります。また,

 rml  H kozminstd-regular.otf

とあれば,texmf-dist/dvipdfm/ 以下にある kozminstd-regular.otf
がサブセット埋め込みされます。

何を埋め込まないかは dvipdfmx のソースツリーの src/cid_basefont.h
に書いておきます([[dvipdfm Japanese patch - Troubleshooting:http://www.nn.iij4u.or.jp/~tutimura/hirata/trouble.html]] 参照)。

**dvips [#ed687ffa]

dvips では,標準では texmf-dist/fonts/vf の下にある jis.vf
という virtual font(仮想フォント)ファイルを参照します。
これはバイナリファイルですが,この中に「実フォント名は rml
である」という情報が書いてあると,texmf-dist/dvips/config/ の中の psfonts.map
という map ファイルに rml という項目がないか探します。
なければ,config.ps に p +kanji.map といった設定があれば,kanji.map
という map ファイルも探します。
dvips に -Ppdf といったオプションを与えると,config.pdf
で指定されている map ファイルも探します。
こういった map ファイルの中に

 rml             Ryumin-Light-H

と書かれていれば,PostScript ファイルに Ryumin-Light-H
という名前と文字コードを出力します。
dvips も実際の文字の形のデータにはアクセスしません。

**ps2pdf [#u8ee6fb2]

ps2pdf は Ghostscript で pdfwrite デバイス出力をするシェルスクリプトですので,Ghostscript
の設定に依存します。
たとえば /usr/share/ghostscript/9.12/Resource/Init/cidfmap に

 /Ryumin-Light           /HeiseiMin-W3-Acro     ;
 /GothicBBB-Medium       /HeiseiKakuGo-W5-Acro  ;

のように書いてあれば,dvips で作った PostScript ファイルに Ryumin-Light
という名前が使ってあれば HeiseiMin-W3-Acro をサブセット埋め込みします。

**pLaTeX2e で和文を使う仕組み [#jf668706]

pLaTeX2e では,まずファミリー名を宣言します。
標準では,明朝 mc とゴシック gt が宣言されているだけです。

明朝フォントの tfm 名を変えるには次のようにします。

 \DeclareFontShape{JY1}{mc}{m}{n}{<-> s * [0.961] jis}{}

これで明朝を使うと jis.tfm で指定されたフォントメトリックを 0.961 倍して使うことになります。

\DeclareFontShape の最初の引数はエンコーディング名です。
JY1 は和文横書きを意味します。
縦書きなら JT1 になります。

3番目の引数はシリーズ(ウェイト)名です。
m は medium シリーズを意味します。
太字なら bx になります。

4番目の引数はシェイプ名です。
n は normal(upright)シェイプを意味します。
他に it(イタリック),sl(斜体),sc(スモールキャップス)が指定できます。

この組合せすべてについて上記のような設定をするわけですが,実フォントがない場合は次のようにして代用させます。

 \DeclareFontShape{JY1}{mc}{bx}{it}{<->ssub*gt/m/n}{}

これで横書き明朝のボールドイタリック体はゴシックの medium,normal で代用されます。

**例 [#y9bc7fa5]

例として,「じゅん」というフォントを使ってみましょう。

「じゅん101」用の tfm ファイルはアスキーの morisawa.tar.gz
に次の三つが含まれていますが,実はこれは一般的な tfm の名前を変えてコピーしただけのものです。

-Jun101-Light-H.tfm …… min10.tfm のコピー
-Jun101-Light-J.tfm …… jis.tfm のコピー
-Jun101-Light-V.tfm …… tmin10.tfm のコピー

したがって,この段階では特に morisawa.tar.gz をダウンロードする必要はありません。

これら(のうち必要なもの)を /usr/share/texlive/texmf-dist/fonts/tfm の下あたりに置いておきます。

次に,スタイルファイルあるいは文書ファイルのプリアンブルに次のように定義します。

 \DeclareKanjiFamily{JY1}{jun}{}
 \DeclareKanjiFamily{JT1}{jun}{}
 \DeclareFontShape{JY1}{jun}{m}{n}{<-> s * [0.961] Jun101-Light-J}{}
 \DeclareFontShape{JY1}{jun}{bx}{n}{<->ssub*jun/m/n}{}
 \DeclareFontShape{JT1}{jun}{m}{n}{<-> s * [0.961] Jun101-Light-V}{}
 \DeclareFontShape{JT1}{jun}{bx}{n}{<->ssub*jun/m/n}{}

これで jun というファミリーが定義できました。
横書きでは Jun101-Light-J.tfm を 0.961 倍にスケールして使います。
// なお,この 0.961 倍というスケーリングは,jsarticle/jsbook で用いられている
// “名目上 10pt のところの和文フォントのサイズを 13Q とする”設定です.
// スケーリングファクタは必要があれば適宜変更してください.
// 例えば,文書中の文字サイズの指定に和文フォントのほうのサイズを
// 直接指定したい(つまり,\fontsize{13Q}{21H}\selectfont としたら
// 和文フォント部分が文字通り 13Q になるという具合に設定したい)場合には,
// むしろ 1.039 倍することになります.
// さらに和文フォントと欧文フォントのサイズ比も考慮すると話は面倒ですが,
// 欧文フォントのフォント定義あるいはフォント選択機構自体に手を加える
// ことで対処できますし,簡便な方法としては
// \newdimen\JQ
// \JQ=1.039Q %%% 和文フォントに何もスケーリングを施さない場合
// %%% \JQ=1.081Q %%% 和文フォントに 0.961 倍のスケーリングを適用した場合
// のような \JQ を用意しておいて \fontsize{13\JQ}{21H} のごとく
// \JQ 単位で文字サイズを指定するという方法もあります.

このフォントを {\mgfamily ほげ} あるいは \textmg{ほげ}
のようなコマンドで使えるようにするには,次のようにします。

 \newcommand{\mgdefault}{jun}
 \DeclareRobustCommand\mgfamily{%
 \not@math@alphabet\mgfamily\textmg
 \romanfamily\ttdefault
 \kanjifamily\mgdefault
 \selectfont}
 \DeclareRobustCommand\ttfamily{%
 \not@math@alphabet\ttfamily\mathtt
 \romanfamily\ttdefault
 \kanjifamily\mgdefault
 \selectfont}
 \DeclareTextFontCommand{\textmg}{\mgfamily}

こうして使えるようになった「じゅん」Jun101-Light-J.tfm
をどの実フォントに対応づけるかは,最初に述べたように,ドライバ(dviout か dvips か dvipdfmx か)によって違います。

**morisawa.sty [#b1050c00]

モリサワ5書体を使うための morisawa.sty
を [[pLaTeX2e 新ドキュメントクラス:http://oku.edu.mie-u.ac.jp/~okumura/jsclasses/]]
のオマケとして配布しています。

tfm,vf ファイルはアスキーから配布されています。
Ring サーバでは
[[/pub/text/TeX/ascii-ptex/jvf/:http://www.dnsbalance.ring.gr.jp/pub/text/TeX/ascii-ptex/jvf/]]
でミラーしています。
standard.tar.gz が jis フォント類,morisawa.tar.gz がモリサワ5書体です。
makejvf-1.1a.tar.gz がこれらを生成するためのプログラムです。