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

[TODO] [[OTF]] パッケージについても含めなくては。
[TODO] [[OTF]] パッケージについても含めなくては.
dvipdfmx と dvips の説明順序と文章内容が合っていませんね…

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

upTeX レベルでは
pTeX レベルでは

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

と書くと,pTeX は jis.tfm
という和文フォントメトリック(JFM)ファイルを参照して文字を並べ,その結果を dvi
ファイルに書き出します.

同様に [[upTeX>upTeX,upLaTeX]] レベルでは

 \font\foo=upjisr-h
 {\foo あいうえお}

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

この dvi ファイルの処理はドライバに依存します。~
pTeX, upTeX は実際の文字の形を収めたファイルにはアクセスしません.
dvi ファイルには jis, upjisr-h というフォント名(tfm 名)だけが入ります.

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

**dvipdfmx [#h017267f]

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

 rml  H Ryumin-Light
 uprml-h  UniJIS-UTF16-H  Ryumin-Light

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

 uprml-h  UniJIS-UTF16-H  ipaexm.ttf
 rml  H HaranoAjiMincho-Regular.otf
 uprml-h  UniJIS-UTF16-H  HaranoAjiMincho-Regular.otf

とあれば,texmf-dist/fonts/truetype/ipa 以下にある ipaexm.ttf
がサブセット埋め込みされます。~
とあれば,texmf-dist/fonts/opentype/public/haranoaji 以下にある HaranoAjiMincho-Regular.otf
がサブセット埋め込みされます.

何を埋め込まないかは dvipdfmx のソースツリーの [[src/cid_basefont.h:http://www.tug.org/svn/texlive/trunk/Build/source/texk/dvipdfm-x/cid_basefont.h?view=markup]]
に書いておきます([[dvipdfm Japanese patch - Troubleshooting [Internet Archive]:http://web.archive.org/web/20041220052307/http://www.nn.iij4u.or.jp/~tutimura/hirata/trouble.html]] 参照)。~
何を埋め込まないかは dvipdfmx のソースツリーの
[[src/cid_basefont.h:http://www.tug.org/svn/texlive/trunk/Build/source/texk/dvipdfm-x/cid_basefont.h?view=markup]]
に書いておきます([[dvipdfm Japanese patch - Troubleshooting [Internet Archive]:http://web.archive.org/web/20041220052307/http://www.nn.iij4u.or.jp/~tutimura/hirata/trouble.html]] 参照).

**dvips [#ed687ffa]

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

こういった map ファイルの中に

 rml           Ryumin-Light-H
 uprml-h       Ryumin-Light-UniJIS-UTF16-H

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

**ps2pdf [#u8ee6fb2]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

**例 [#y9bc7fa5]

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

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

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

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

これら(のうち必要なもの)を /usr/share/texlive/texmf-dist/fonts/tfm の下あたりに置いておきます。~
これら(のうち必要なもの)を /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 倍にスケールして使います。~
これで 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
をどの実フォントに対応づけるかは,最初に述べたように,ドライバ(dvipdfmx か dvips か)によって違います。
をどの実フォントに対応づけるかは,最初に述べたように,ドライバ(dvipdfmx か dvips か)によって違います.

**morisawa.sty [#b1050c00]

モリサワ5書体を使うための morisawa.sty
を [[pLaTeX2e 新ドキュメントクラス>jsclasses]]
のオマケとして配布しています。~

https://ctan.org/pkg/morisawa
で配布しています.

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 がこれらを生成するためのプログラムです。~