Edited at

(u)pLaTeXのデフォルトの日本語フォントを好きなやつに変える方法


概要

TeX Liveでは、(u)pLaTeX文書の“標準”の和文フォントに割り当てられる(要するに、dvipdfmxで生成したPDF文書に埋め込まれる)実際の書体を、kanji-config-updmapというコマンドで設定できます。

# ※ Unix的OSの場合, sudoが必要


# IPAexフォントを使う
$ kanji-config-updmap-sys ipaex

# macOS(El Capitan以降)付属のヒラギノフォントを使う
$ kanji-config-updmap-sys hiragino-elcapitan-pron

# 小塚フォント(Pr6N版)を使う; 2004JIS字形指定
$ kanji-config-updmap-sys --jis2004 kozuka-pr6n

これにより、dvipsとdvipdfmxの既定の(他の場所での指定がない場合の)書体を非常に簡単に選択できるわけです。

先に示した例は全て、既定で用意されている設定です。ところが、kanji-config-updmapでは、ユーザが自分で設定(フォントマップ)を作ってそれを適用することもできます。本記事ではその手順を説明します。

※「既定の設定に何があるか」の方を知りたい人は、ptex-fontmapsパッケージのREADMEを参照してください。


前提


  • TeX Live 2014以降を対象とします。

  • kanji-config-updmapコマンドの基本的な使い方は知っていると仮定します。

  • マップファイルの作り方についての知識は前提としません

  • PostScript→PDF変換ソフトウェア(Ghostscript等)の設定については扱いません。

  • TeX言語についての知識は不要です。(やったね!)


手順①:“設定の中身”をきちんと決める

kanji-config-updmapの設定対象とする和文フォントは、(u)pTeXの標準のものに加えて、japanese-otfパッケージの和文フォントも含まれます。japanese-otfの多書体設定(deluxeオプション)においては次の7種類の“フォント”(本記事では1これを論理フォントと呼ぶことにします)を使用できます。


  1. 明朝体・細字(\mcfamily\ltseries

  2. 明朝体・中字(\mcfamily\mdseries

  3. 明朝体・太字(\mcfamily\bfseries

  4. ゴシック体・中字(\gtfamily\mdseries

  5. ゴシック体・太字(\gtfamily\bfseries

  6. ゴシック体・極太(\gtfamily\ebseries

  7. 丸ゴシック体(\mgfamily

従って、“設定の中身”としては、これらの7つの論理フォントに割り当てる“実際の書体”(これを物理フォントと呼びます)を決める必要があります。ただし、これらの全てに異なる物理フォントを割り当てる必要はありません。japanese-otfの多書体設定を用いないのであれば、実際には明朝(\mcfamily)とゴシック(\gtfamily)の1ウェイトずつしか用いられないので、1~3に同じ“明朝体のフォント”、4~7に同じ“ゴシック体のフォント”を割り当てれば十分です。

“設定の中身”としては、これに加えて、設定に名前(ファミリ名という2)を付ける必要があります。これはkanji-config-updmapの引数に指定する文字列(先の例におけるkozuka-pr6nなど)のことです。


どんなフォントが使えるのか

この記事にある手順で対応できるのは、以下の何れかの条件を満たす日本語フォントに限られます。


  • TrueTypeグリフのOpenTypeフォント。


    • 以下ではこれを単に「TrueTypeフォント」と呼ぶ。

    • TrueType Collection 形式もサポートされる。



  • CFFグリフのOpenTypeフォントで、Adobe-Japan1(AJ1)のグリフ集合をもつもの。


    • 以下ではこれを単に「OpenTypeフォント」と呼ぶ。

    • OpenType Collection 形式のフォントは、dvipdfmxについてはTeX Live 2016以降の版が必要である3

    • かつては日本語用のOpenTypeフォントのグリフ集合は全てAJ1であったが、最近ではカスタムのグリフ集合をもったフォントも増えている。例えば、「源ノ角ゴシック(Source Han Sans JP)/Noto Sans Japanese」や最近のmacOS付属の日本語フォントの一部(游明朝など)で、これらはこの記事での手順では正常に扱えない。



※これに加えて、「全角幅のグリフ(字形)しか利用できない」ということにも注意してください4。この理由は、kanji-config-updmapの対象となる論理フォントが全角幅を前提としているからです5。従って、原則として「等幅」の日本語フォントを選択する必要があります。


オレオレ設定

以下では、実際の例に沿って手順を説明することにします。例として、以下のような「オレオレ設定」を使います。


  • ファミリ名: oreore

  • 使用フォント:


    1. 明朝体・細字: はんなり明朝 (Hannari.otf)

    2. 明朝体・中字: はんなり明朝 (Hannari.otf)

    3. 明朝体・太字: はんなり明朝 (Hannari.otf)

    4. ゴシック体・中字: 源真ゴシック等幅 Regular (GenShinGothic-Monospace-Regular.ttf)

    5. ゴシック体・太字: 源真ゴシック等幅 Bold (GenShinGothic-Monospace-Bold.ttf)

    6. ゴシック体・極太: 源真ゴシック等幅 Heavy (GenShinGothic-Monospace-Heavy.ttf)

    7. 丸ゴシック体: 源柔ゴシック等幅 Medium (GenJyuuGothic-Monospace-Medium.ttf)




手順②:フォントファイルを配置する

物理フォントのフォントファイルを「TeXから見える場所」に置く必要があります。具体的には次のようになります。


  • TrueTypeフォントの場合は以下のディレクトリに置きます。

    $TEXMFLOCAL/fonts/truetype/VENDOR/FONT/

  • OpenTypeフォントの場合は以下のディレクトリに置きます。

    $TEXMFLOCAL/fonts/opentype/VENDOR/FONT/

  • ファイルの実体の代わりにシンボリックリンクを置いても構いません。

  • 一部のシステム(Windowsなど)では、OSにフォントをインストールすることでも目的を果たせます。
    [追記2019-08-27] Windows 10(バージョン1809以降)の場合、フォントのインストールには「自分用」「全ユーザ用」の2つの方法がありますが、TeXでも使えるようにするにはフォントを「全ユーザ用」でインストールする必要があります。(管理者権限が必要です。)

truetypeopentypeのどちらのパスを選ぶかは、フォントの種類によって決まります。ファイル拡張子は無関係なので、例えば「拡張子が.otfであるTrueTypeフォントファイル」はtruetypeのパスに置くことになります。

※上記手順に現れる$TEXMFLOCALの実際の値は次のコマンドで調べられます。

$ kpsewhich -var-value=TEXMFLOCAL

/usr/local/texlive/texmf-local

VENDORNAMEは実際には任意の文字列で構いませんが、普通はVENDORにはベンダ名(adobemorisawaなど。有名ベンダに属さないフォントの場合はpublicとします)、NAMEはフォント(シリーズ)名(Hannariなど)を用います。

今回の例では以下のディレクトリに配置することにしましょう。


  • はんなり明朝 →

    $TEXMFLOCAL/fonts/opentype/public/Hannari/Hannari.otf

  • 源真ゴシック等幅 Regular →

    $TEXMFLOCAL/fonts/truetype/public/GenShinGothic/GenShinGothic-Monospace-Regular.ttf

  • 源真ゴシック等幅 Bold →

    $TEXMFLOCAL/fonts/truetype/public/GenShinGothic/GenShinGothic-Monospace-Bold.ttf

  • 源真ゴシック等幅 Heavy →

    $TEXMFLOCAL/fonts/truetype/public/GenShinGothic/GenShinGothic-Monospace-Heavy.ttf

  • 源柔ゴシック等幅 Medium →

    $TEXMFLOCAL/fonts/truetype/public/GenJyuuGothic/GenJyuuGothic-Monospace-Medium.ttf


手順③:マップファイルを作る

kanji-config-updmapの枠組に従う場合、次の6つのマップファイル(dvipdfmx用)を作成する必要があります。



  • ptex-FAMILY.map: pTeX標準フォント用(90JIS字形)


  • ptex-FAMILY-04.map: pTeX標準フォント用(2004JIS字形)


  • uptex-FAMILY.map: upTeX標準フォント用(90JIS字形)


  • uptex-FAMILY-04.map: upTeX標準フォント用(2004JIS字形)


  • otf-FAMILY.map:pTeX+japanese-otfパッケージ用


  • otf-up-FAMILY-04.map:upTeX+japanese-otfパッケージ用

※ここでFAMILYは最初に決めた「ファミリ名」(今の例ではoreore)です。

マップファイルはそれなりの知識があれば自力でも作成できますが、イロイロと大変なので、ここではチートすることにしましょう。TeX Liveに元々含まれている既存のマップファイルを改変コピーするわけです。

ここではヒラギノフォント用のマップ(ファミリ名 hiragino)をコピー元に使うことにします。まずは、目当てのマップファイルが置いてある場所を探します6

$ kpsewhich ptex-hiragino.map

/usr/local/texlive/2016/texmf-dist/fonts/map/dvipdfmx/ptex-fontmaps/hiragino/ptex-hiragino.map

ここで示されたディレクトリの中を調べると、想定通りの6つマップファイルが見つかるはずです。


  • ptex-hiragino.map

  • ptex-hiragino-04.map

  • uptex-hiragino.map

  • uptex-hiragino-04.map

  • otf-hiragino.map

  • otf-up-hiragino-04.map

この中の一つ、例えばptex-hiragino-04.mapの中をのぞいてみましょう7


ptex-hiragino-04.map

rml     2004-H  HiraMinPro-W3.otf

rmlv 2004-V HiraMinPro-W3.otf
gbm 2004-H HiraKakuPro-W6.otf
gbmv 2004-V HiraKakuPro-W6.otf

この記述の中にあるHiraMinPro-W3.otfHiraKakuPro-W6.otfがヒラギノフォントのファイル名です。一般のhiraginoのマップファイルでは次のようなフォントファイル名が指定されています。



  • HiraMinPro-W2.otf:明朝体・細字


  • HiraMinPro-W3.otf:明朝体・中字


  • HiraMinPro-W6.otf:明朝体・太字


  • HiraKakuPro-W3.otf:ゴシック体・中字


  • HiraKakuPro-W6.otf:ゴシック体・太字


  • HiraKakuStd-W8.otf:ゴシック体・極太


  • HiraMaruPro-W4.otf:丸ゴシック体

今やりたいのは「物理フォントだけ別のものに変える」ことなので、先のマップの記述の中のファイル名だけを所望の設定のファイル名に置き換えます。つまり、oreoreファミリのためのptex-oreore-04.mapは以下のようになるわけです。


ptex-oreore-04.map

rml     2004-H  Hannari.otf

rmlv 2004-V Hannari.otf
gbm 2004-H GenShinGothic-Monospace-Bold.ttf
gbmv 2004-V GenShinGothic-Monospace-Bold.ttf

同じ要領で、他の5つのマップファイルも作れます。

ただし、otf-hiragino.mapについては一つ注意が必要です。このファイルの末尾には、次のようなマップ行が書かれています。

% hiraprop

hiramin-w3-h Identity-H HiraMinPro-W3.otf
hiramin-w6-h Identity-H HiraMinPro-W6.otf
hirakaku-w3-h Identity-H HiraKakuPro-W3.otf
hirakaku-w6-h Identity-H HiraKakuPro-W6.otf
hiramaru-w4-h Identity-H HiraMaruPro-W4.otf
hiramin-w3-v Identity-V HiraMinPro-W3.otf
hiramin-w6-v Identity-V HiraMinPro-W6.otf
hirakaku-w3-v Identity-V HiraKakuPro-W3.otf
hirakaku-w6-v Identity-V HiraKakuPro-W6.otf
hiramaru-w4-v Identity-V HiraMaruPro-W4.otf

これらは本当に「ヒラギノ専用8」で、他のフォントでは意味を成さないので、改変後のマップファイルではこの部分は削っておきます。

最終的なotf-oreore.mapは以下のようになります。


otf-oreore.map

% TEXT, 90JIS

hminl-h H Hannari.otf
hminl-v V Hannari.otf
hminr-h H Hannari.otf
hminr-v V Hannari.otf
hminb-h H Hannari.otf
hminb-v V Hannari.otf
hgothr-h H GenShinGothic-Monospace-Regular.ttf
hgothr-v V GenShinGothic-Monospace-Regular.ttf
……(中略)……
otf-ujmbn-h UniJIS2004-UTF16-H Hannari.otf
otf-ujmbn-v UniJIS2004-UTF16-V Hannari.otf
otf-ujgrn-h UniJIS2004-UTF16-H GenShinGothic-Monospace-Regular.ttf
otf-ujgrn-v UniJIS2004-UTF16-V GenShinGothic-Monospace-Regular.ttf
otf-ujgbn-h UniJIS2004-UTF16-H GenShinGothic-Monospace-Bold.ttf
otf-ujgbn-v UniJIS2004-UTF16-V GenShinGothic-Monospace-Bold.ttf
otf-ujgen-h UniJIS2004-UTF16-H GenShinGothic-Monospace-Heavy.ttf
otf-ujgen-v UniJIS2004-UTF16-V GenShinGothic-Monospace-Heavy.ttf
otf-ujmgrn-h UniJIS2004-UTF16-H GenJyuuGothic-Monospace-Medium.ttf
otf-ujmgrn-v UniJIS2004-UTF16-V GenJyuuGothic-Monospace-Medium.ttf

※もちろん、こういう単純作業はスクリプトで済ませたいところです。参考として、自分が(この記事を書くために)作ったやつを置いておきます。


チョット注意



  • TrueType/OpenType Collection形式のフォントファイルは、複数のフォントを1つのファイルに束ねたものです。そのようなフォントを指定する場合は、マップ行のファイル名の部分を :番号:ファイル名 とします。ここで番号は所望のフォントの位置を表す整数(0起点)です。

    例えば、Windows付属のフォントファイルmsgothic.ttcには「MS ゴシック」「MS UI Gothic」「MS Pゴシック」の3つのフォントが順に含まれています。従って、「MS ゴシック」を指定したい場合は :0:msgothic.ttc と書くことになります。



  • ヒラギノのフォントマップでは、標準の(単ウェイトの)ゴシック体の箇所に、「ゴシック体・太字」に相当するHiraKakuPro-W6.otfを割り当てています。「標準のゴシック体は太くないやつがよい」という場合は、(u)ptex-*.mapに現れるゴシック体のフォント(1種類しかないはず)を太字でなく中字のものにしましょう。



手順④:マップファイルを配置する

作成した6つのマップファイルを以下のディレクトリに置きます。


  • $TEXMFLOCAL/fonts/map/dvipdfmx/FAMILY/

※例によってFAMILYは「ファミリ名」です。$TEXMFLOCALはさっき説明しましたね。


手順⑤:mktexlsrする

$TEXMFLOCALのツリーにファイルを追加したので、mktexlsrを実行しましょう。

$ mktexlsr

mktexlsr: Updating /usr/local/texlive/2016/texmf-config/ls-R...
mktexlsr: Updated /usr/local//texlive/2016/texmf-config/ls-R.
……(略)……
mketxlsr: Done.

※ちなみに、TeX Liveでは「ls-Rを置かない運用」は想定されていません。


手順⑥:作った設定を適用する

これまでの手順で、既にoreore設定が使用できる状態になっています。なので、あとは実際にkanji-config-updmapを実行するだけです。

# 必要ならsudo

$ kanji-config-updmap-sys oreore
Setting up ... ptex-oreore.map
……(略)……
/usr/local/texlive/2016/texmf-var/fonts/map/dvipdfmx/updmap:
8395 2017-05-14 08:33:49 kanjix.map
Transcript written on "/usr/local/texlive/2016/texmf-var/web2c/updmap.log".
updmap: Updating ls-R files.

※もし次のようなエラーが出た場合は、作成したマップファイルが認識されていない、ということです。パス名やファイル名が正しいかを確認しましょう。

NOT EXIST ptex-oreore.map

※kanji-config-updmapのstatusコマンドで現在有効な設定値を確認できます。

$ kanji-config-updmap-sys status

CURRENT family for ja: oreore
Standby family : ipa
Standby family : ipaex


チョット注意


  • カスタムで追加したファミリは、kanji-config-updmapのautoコマンドによる自動選択の対象には決して含まれません。また、statusコマンドの「Standby family」にも現れません(先の例で示したように「CURRENT family」には現れます)。


手順⑦:何か組版してみる

フォントマップが正しく変更されたかを確かめるために、適当な文書を組版してみましょう。oreoreは多ウェイトの設定なので、実際にjapanese-otfの多ウェイトを利用した文書を用意します。

% pLaTeX文書

\documentclass[a4paper]{jsarticle}
\usepackage[deluxe]{otf}% 多書体設定を使う
\begin{document}

\rmfamily\mcfamily % 明朝体
{\TeX}{\ltseries アレ}アレ{\bfseries アレ}

\sffamily\gtfamily % ゴシック体
{\TeX}はアレ{\bfseries アレ}{\ebseries アレ}

\mgfamily % 丸ゴシック体
{\ajSnowman}は非アレ。

\end{document}

これをいつも通りにplatex+dvipdfmxでコンパイル(dvipdfmxにマップファイル指定は付けません)すると、以下の出力が得られます。

kanjiconfig-1.png

指定した通りのフォントが使われていますね!9(もちろん、明朝体は全ウェイトを同じフォントにしたのでそうなっています。)

お疲れ様でした!


おまけ:pxchfonで自作のマップファイルを適用する

kanji-config-updmapは既定のフォント割当を設定するためのものです。これに対して、使うフォントを文書ごとに変えたい、あるいは、文書の設定として明示したい(つまり「この文書は『はんなり明朝』で組む」と指定したい)という場合は、文書中でフォント割当を指定するのが適切でしょう。そこで、pxchfonパッケージを利用して、先の手順で用意した自作のフォントマップの適用を文書中で指定する方法を紹介します。


pxchfonの使い方を復習する

pxchfonパッケージの一般的な使い方では、プレアンブルにおいて、フォントファイル名を直接指定する命令を記述します。

% pLaTeX文書

\documentclass[a4paper]{jsarticle}
\usepackage[noalphabet]{pxchfon}
% 明朝体フォントのファイル名を指定する
\setminchofont{Hannari.otf}% はんなり明朝
% ゴシック体フォントのファイル名を指定する
\setgothicfont[0]{HGRPP1.TTC}% HG創英角ポップ体
\begin{document}
{\TeX}\textgt{アレ。}
\end{document}

この他に、「プリセット名」を指定してフォントを一括で指定することもできます。

% pLaTeX文書

\documentclass[a4paper]{jsarticle}
% 小塚フォントPr6N版を指定する
\usepackage[kozuka-pr6n]{pxchfon}
\begin{document}
{\TeX}\textgt{アレ。}
\end{document}

しかし、この「プリセット」はパッケージ自体が持っている情報を使う(名前は同じですが、kanji-config-updmapの“kozuka-pr6n”のマップファイルを使うのではありません)ものなので、ここで oreore を「プリセット名」として指定することはできないわけです。


TeX Liveのマップファイルをpxchfonで使う

しかし、pxchfonはkanji-config-updmapのマップファイルを利用してフォントを一括指定する機能も備えています。次のように、+FAMILY という形のオプション(つまり+oreoreなど)を指定すると、oreoreファミリに対するkanji-config-updmap用の一連のマップファイルの読込が指示されます。

% pLaTeX文書

\documentclass[a4paper]{jsarticle}
% 文書中でオレオレ設定を指定する!
\usepackage[+oreore]{pxchfon}
\begin{document}
{\TeX}\textgt{アレ。}
\end{document}


まとめ

TeX Liveでは、(u)pTeXの和文フォントに対するカスタムの設定が(比較的……)簡単にできます。自分の好みのフォントを指定して素敵な文書を作りましょう!





  1. 「論理フォント」という用語は普通はTeXのTFMのことを指します。しかしここではTeX言語レベルの話は避けたいので、代わりにLaTeXにおけるフォント選択のことを「論理フォント」と見なします。なお、一つのフォント選択(例えば「明朝体・中字」)に対応するTFMは複数あります。 



  2. NFSSのファミリ名(cmrとかmcとか)とは別の概念です。 



  3. dvipsはそれ自身は物理フォントを扱わない(PostScript文書に日本語フォントが“埋め込まれる”ことはない)ので、原理的には何でも(存在しないフォント名でも)扱えます。しかし、PostScript文書を扱うソフトウェア(Ghostscript等)がそのフォントに対応しているとは限らないことに注意が必要です。例えば、現状ではGhostscriptはOpenType Collection形式をサポートしていません。 



  4. 全角幅でないグリフが含まれること自体は問題ないですが、そのようなグリフを実際に使うことはできません。例えば、仮名がプロポーショナル幅である「MS P明朝」を指定すると、結果として仮名が全く使えなくなってしまうので、そのような指定は有用ではないでしょう。 



  5. つまり、一般的に「(u)pLaTeXでは全角幅のグリフしか使えない」というわけでは決してありません。しかし、全角幅でないグリフを扱えるような論理フォントを自分で作製することは、通常のLaTeXユーザにとっては至難の業です。 



  6. なお、ここでいう「ヒラギノフォントのマップ」とは、macOS付属のものだとYosemite以前の版に対応するものです。あるいは、「自分でヒラギノフォントを入手した場合」も想定しています。 



  7. 本記事では、マップファイルのテキストに含まれるタブ文字は“適当に”空白に展開して示します。 



  8. ヒラギノのプロポーショナル幅の仮名グリフを利用するためのhirapropというパッケージのための設定です。 



  9. ちなみに、「90JIS字形と2004JIS字形の使い分け」についてはフォントの種類によっては正しく効かない場合があります。特に、(この記事の手順に従う場合は)TrueTypeフォントでは両字形の使い分けは、フォントが対応していたとしても無効になります。OpenTypeフォントでは効くはずですが、特にフリーフォントの場合は正しく実装されていない場合があるようです。