Edited at

upLaTeX文書で源ノ明朝/Noto Serif CJKを簡単に使う方法(最新のdvipdfmxとpxchfonを使用)

以前に書いた記事「(u)pLaTeXのデフォルトの日本語フォントを好きなやつに変える方法」で少し述べたように、源ノ角ゴシック(Source Han Sans)/Noto Sans CJKのような“AJ1でないOpenType-CFFフォント”をdvipdfmxで利用するための設定は、従来は非常に面倒でした。フォントが特殊であり「よく使われている設定方法」が通用しないためです。

ところが、TeX Live 2018以降に含まれる新しいdvipdfmxにおいては、“AJ1でないOpenType-CFFフォント”が比較的容易に利用できるようになっています。

この記事では、新しいdvipdfmxとpxchfonパッケージを用いて、pLaTeX/upLaTeXでSource Han Serif/Sans(源ノ明朝/角ゴシック)およびNoto Serif/Sans CJKを利用する方法を説明します。

※追記[2019-06-01] 記事の内容をTeX Live 2018以降(2017は除外)を前提にして再構成しました。

※dvipdfmxの新しい仕様自体に興味がある人は、dvipdfmxのマニュアルを参照1しましょう。


前提


  • TeX Live 2018以降で、(u)pLaTeX+dvipdfmxを使っている。

    ※dvipdfmxの20170918版以降とpxchfonの1.1版以降がある環境であれば、類似の手順が使えると思われる。

  • コマンドシェル(コマンドプロンプト)の操作に慣れている。


対象のフォント

Source Han/Noto CJKには幾つかのフォント形式がありますが、この記事で紹介する方法でサポートされるのは以下に挙げるセットです。従って、これらのセットのうちのどれか1つ2をTeX Liveに導入する必要があります。

※TeX Live 2017のdvipdfmxにおいては、機能上の制限のため、日本語用の設定において、一部、韓国語版や簡体字中国語版のフォント3を使用していました。TeX Live 2018以降ではこのトリックは不要となったので日本語版だけを導入すれば十分です。


sourcehan: Source Han Serif/Sans 言語別OTF版

Source Han Serif/Sans(源ノ明朝/角ゴシック)の言語別(非サブセットの)OpenType版(日本語用)です。


  • SourceHanSerif-Light.otf

  • SourceHanSerif-Regular.otf

  • SourceHanSerif-Bold.otf

  • SourceHanSans-Regular.otf

  • SourceHanSans-Medium.otf

  • SourceHanSans-Bold.otf

  • SourceHanSans-Heavy.otf


sourcehan-otc: Source Han Serif/Sans OTC版

Source Han Serif/Sansの(Superでない)OpenType Collection版です。


  • SourceHanSerif-Light.otc

  • SourceHanSerif-Regular.otc

  • SourceHanSerif-Bold.otc

  • SourceHanSans-Regular.otc

  • SourceHanSans-Medium.otc

  • SourceHanSans-Bold.otc

  • SourceHanSans-Heavy.otc

※この形式では、各CJK言語版が1つのファイルにまとめられています。


noto: Noto Serif/Sans CJK 言語別OTF版

Noto Serif/Sans CJKの言語別(非サブセットの)OpenType版(日本語用)です。


  • NotoSerifCJKjp-Light.otf

  • NotoSerifCJKjp-Regular.otf

  • NotoSerifCJKjp-Bold.otf

  • NotoSansCJKjp-Regular.otf

  • NotoSansCJKjp-Medium.otf

  • NotoSansCJKjp-Bold.otf

  • NotoSansCJKjp-Black.otf


noto-otc: Noto Serif/Sans CJK OTC版

Noto Serif/Sans CJKの(Superでない)OpenType Collection版です。


  • NotoSerifCJK-Light.ttc

  • NotoSerifCJK-Regular.ttc

  • NotoSerifCJK-Bold.ttc

  • NotoSansCJK-Regular.ttc

  • NotoSansCJK-Medium.ttc

  • NotoSansCJK-Bold.ttc

  • NotoSansCJK-Black.ttc

※この形式では、各CJK言語版が1つのファイルにまとめられています。


さらに新しいpxchfonで追加されたもの

pxchfonの1.4版以降では、地域別サブセット版のフォントも対象になります。

※どうしてもSuperOTC版を使いたい場合は付録の解説を参照してください。


sourcehan-jp: Source Han Serif/Sans 地域別サブセットOTF版

Source Han Serif/Sans(源ノ明朝/角ゴシック)の地域別サブセットのOpenType版(日本用)です。


  • SourceHanSerifJP-Light.otf

  • SourceHanSerifJP-Regular.otf

  • SourceHanSerifJP-Bold.otf

  • SourceHanSansJP-Regular.otf

  • SourceHanSansJP-Medium.otf

  • SourceHanSansJP-Bold.otf

  • SourceHanSansJP-Heavy.otf


noto-jp: Noto Serif/Sans CJK 地域別サブセットOTF版

Noto Serif/Sans CJKの言語別サブセットのOpenType版(日本用)です。


  • NotoSerifJP-Light.otf

  • NotoSerifJP-Regular.otf

  • NotoSerifJP-Bold.otf

  • NotoSansJP-Regular.otf

  • NotoSansJP-Medium.otf

  • NotoSansJP-Bold.otf

  • NotoSansJP-Black.otf


フォントファイルの導入

導入するセットの各フォントファイルをTeXから見える状態にする必要があります。


確認の方法

まずは「フォントファイルが導入済であるか」(TeXから見える状態にあるか)を確認する方法を述べます。次のように、kpsewhichコマンドを利用します。

$ kpsewhich SourceHanSerif-Regular.otf

/usr/local/texlive/texmf-local/fonts/opentype/adobe/sourcehanserif/SourceHanSerif-Regular.ttc

これで、何らかのパス名が表示されれば、そのフォントファイルは「導入済」です。

各セットについて、抜粋した幾つかのフォントファイルの確認コマンドを載せておきます。


sourcehan

kpsewhich SourceHanSerif-Regular.otf

kpsewhich SourceHanSans-Heavy.otf


sourcehan-otc

kpsewhich SourceHanSerif-Regular.ttc

kpsewhich SourceHanSans-Heavy.ttc


sourcehan-jp

kpsewhich SourceHanSerifJP-Regular.otf

kpsewhich SourceHanSansJP-Heavy.otf


noto

kpsewhich NotoSerifCJKjp-Regular.otf

kpsewhich NotoSansCJKjp-Black.otf


noto-otc

kpsewhich NotoSerifCJK-Regular.ttc

kpsewhich NotoSansCJK-Black.ttc


noto-jp

kpsewhich NotoSerifJP-Regular.otf

kpsewhich NotoSansJP-Black.otf


手順


  1. 既に対象のフォントが導入済である可能性もあるので、上述の「確認」を行います。
    →導入済であれば何もせず完了

  2. フォントをOSにインストールする場合:


    • 通常の手順で対象フォントをインストールします。具体的な手順はここでは説明しないので、他の文献を参照してください。
      [追記2019-08-27] Windows 10(バージョン1809以降)の場合、フォントのインストールには「自分用」「全ユーザ用」の2つの方法がありますが、TeXでも使えるようにするにはフォントを「全ユーザ用」でインストールする必要があります。(管理者権限が必要です。)
      参考→Windows10+upLaTeXで源ノ明朝を使う




  3. フォントをOSにインストールしない(TeXからのみ使用する)場合:


    • フォントファイルを公式サイト(Source Han SerifSource Han SansNoto CJK)から入手します。


    • フォントファイルを以下のディレクトリに配置します。

      (Source Han Serif の場合)
      
      $TEXMFLOCAL/fonts/opentype/adobe/sourcehanserif/
      (Source Han Sans の場合)
      $TEXMFLOCAL/fonts/opentype/adobe/sourcehansans/
      (Noto Serif CJK の場合)
      $TEXMFLOCAL/fonts/opentype/google/notoserifcjk/
      (Noto Sans CJK の場合)
      $TEXMFLOCAL/fonts/opentype/google/notosanscjk/

      ※ここで$TEXMFLOCALの値は以下のコマンドで調べます。

      $ kpsewhich -var-value=TEXMFLOCAL
      
      /usr/local/texlive/texmf-local

      ※パス中のベンダ名(adobeなど)とファミリ名(sourcehanserifなど)は実際には任意の文字列で構いません。





  4. mktexlsrを実行します。(必要ならsudoを付ける。)



  5. 再び「確認」を行います。
    →導入済であればここで完了


    • 3を実行したのであれば導入済になっているはずです。

    • Windowsの場合は2の実行でも導入済になっているはずです。
      (従って、以降の手順はUnix系OSが前提になります。)




  6. 3.で指定されているディレクトリに、(システム中に存在する)実際のフォントファイルに対するリンクを配置します。

    # 例えば...
    
    $ ln -s /usr/share/fonts/OpenType/shs/SourceHanSans-Regular.otf /usr/local/texlive/texmf-local/fonts/opentype/adobe/sourcehansans/SourceHanSans-Regular.otf


  7. mktexlsrを実行します。(必要ならsudoを付ける。)


  8. 再び「確認」を行います。
    →導入済になっているはずです。



(u)pLaTeX文書の書き方

フォントファイルの導入の作業は(例によって)少し面倒でした。しかし、一度導入作業を済ませてしまった後は、文書中でSource Han/Noto CJKの使用を指定するのは極めて簡単です。


キホン的な場合

文書のプリアンブルでpxchfonパッケージを読み込みます。この際に、自分が導入したセットの名前(sourcehansourcehan-otcsourcehan-jpnotonoto-otcnoto-jp)をパッケージオプションに入れます(pxchfonの用語ではこれを「プリセットを指定する」といいます)。


sourcehanの場合

% upLaTeX文書, 文字コードはUTF-8(以後同様)

\documentclass[uplatex,a4paper]{jsarticle}
% ↓OTF版のSource Han Serif/Sansの場合, コレを書く
\usepackage[sourcehan]{pxchfon}
\begin{document}% Source Han Serif/Sans が使われる
{\TeX}\textgt{アレ}、☃は\textgt{非アレ}
\end{document}


sourcehan-otcの場合

\documentclass[uplatex,a4paper]{jsarticle}

% ↓OTC版のSource Han Serif/Sansの場合, コレを書く
\usepackage[sourcehan-otc]{pxchfon}
\begin{document}% Source Han Serif/Sans が使われる
{\TeX}\textgt{アレ}、☃は\textgt{非アレ}
\end{document}


notoの場合

\documentclass[uplatex,a4paper]{jsarticle}

% ↓OTF版のNoto Serif/Sans CJKの場合, コレを書く
\usepackage[noto]{pxchfon}
\begin{document}% Noto Serif/Sans CJK が使われる
{\TeX}\textgt{アレ}、☃は\textgt{非アレ}
\end{document}


noto-otcの場合

\documentclass[uplatex,a4paper]{jsarticle}

% ↓OTC版のNoto Serif/Sans CJKの場合, コレを書く
\usepackage[noto-otc]{pxchfon}
\begin{document}% Noto Serif/Sans CJK が使われる
{\TeX}\textgt{アレ}、☃は\textgt{非アレ}
\end{document}

sourcehan-jpnoto-jpの例は省略しますが、要するに\usepackageの後の[]の中身が違うだけです。

同一の書体をもつフォントなので、出力はどのセットを使う場合も同じです。

pLaTeX文書の例も挙げておきましょう。


pLaTeX文書の例

\documentclass[a4paper]{jsarticle}

% ↓地域別OTF版のSource Han Serif/Sansの場合
\usepackage[sourcehan-jp]{pxchfon}
\begin{document}
{\TeX}\textgt{アレ}{\LaTeX}\textgt{微アレ}
\end{document}

ちなみに、この時に使われているウェイトは、明朝はRegular、ゴシックはMediumとなります。

※以降の例ではsourcehan-otcを用いますが、他のセットを用いる場合もプリセットのオプションが異なるだけで文書の他の書き方は全く同じです。また、例ではupLaTeX文書を使っていますが、紹介する機能自体はpLateXでも使用できます。


縦組の場合

全く同じ方法で縦組の文書でSource Han/Noto CJKを使うことができます。


縦組の例

% jlreqクラスで縦組書籍用レイアウトを指定

\documentclass[uplatex,tate,book,paper=b6,fontsize=9pt]{jlreq}
\usepackage{bxpapersize}% 出力用紙サイズを設定する
% pxchfonの使い方自体は全く変わらない
\usepackage[sourcehan-otc]{pxchfon}
\begin{document}
{\TeX}言語、危険。\par
\textsf{ダメゼッタイ!}\par
\end{document}

※この例では縦組文書クラスとしてjlreqクラスを利用しています。


japanese-otfパッケージを使う

pxchfonパッケージはjapanese-otfパッケージ(OTFパッケージ)の多書体設定(deluxe)にも対応しています。この場合、pxchfonをjapanese-otfよりも後に読み込む必要があります。


多ウェイト使用の例

\documentclass[uplatex,a4paper]{jsarticle}

\usepackage[deluxe]{otf}% 多書体設定
\usepackage[sourcehan-otc]{pxchfon}% 後に読み込む
\begin{document}
\mcfamily % \ltseries で"細字"になる
明朝体の、{\ltseries 細字}と中字と{\bfseries 太字}\par
\gtfamily % \ebseries で"極太"になる
ゴシック体の、中字と{\bfseries 太字}{\ebseries 極太}\par
\end{document}

この時に使われるウェイトは次のようになります:


  • 明朝体:細字=Light、中字=Regular、太字=Bold

  • ゴシック体:中字=Regular、太字=Bold、極太=Heavy/Black4

ただし、\CID命令およびajmacrosが提供する命令群(\ajナントカの名の命令)については注意が必要です。これらの命令は「AJ1のグリフを直接入力する」ための機能であるため、“AJ1でないフォント”であるSource Han/Noto CJKでは本来は機能しないはずです。しかし、pxchfonでは「Unicodeでの出力」にフォールバックすることにより、Unicodeで扱える範囲に限ってこれらの命令をサポートしています5

※漢字に対する\CID命令については、「JIS90字体」「JIS2004字体」に相当する字形のみがサポートされます。


ajmacrosの命令を使う例

\documentclass[uplatex,a4paper]{jsarticle}

\usepackage{otf}
\usepackage[sourcehan-otc]{pxchfon}
\begin{document}
\CID{13706}野家的な藤子不二雄\○A。

% ㊷はUnicodeにある(U+32B7)が, "丸54"はない
\ajMaru{42}\ajMaru{54}
\end{document}


(“丸54”はUnicodeにないので文字化けする)


JIS2004字体への切替

Source Han/Noto CJKはともに「OpenType属性による漢字のJIS90字体とJIS2004字体の切替」に対応しています。pxchfon(+japanese-otf)を用いた場合、デフォルトではJIS90字体が使われます。


デフォルト設定

\documentclass[uplatex,a4paper]{jsarticle}

\usepackage[deluxe]{otf}
\usepackage[sourcehan-otc]{pxchfon}% デフォルト
\begin{document}
% JIS90字体が用いられる
葛餅で蓬餅で、かつ\textbf{煎餅}

\sffamily % もちろん\gtfamilyでも同じ
巷で噂の\textbf{葛飾区}
\end{document}


JIS2004字体で出力したい場合は、グローバルオプション6(クラスオプション)としてjis2004を指定します。これでpxchfon7とjapanese-otfの両方にjis2004オプションが適用されます。


JIS2004字体の指定

% グローバルオプションに'jis2004'を追加

\documentclass[uplatex,a4paper,jis2004]{jsarticle}
\usepackage[deluxe]{otf}
\usepackage[sourcehan-otc]{pxchfon}
\begin{document}
% JIS2004字体が用いられる
葛餅で蓬餅で、かつ\textbf{煎餅}

\sffamily
巷で噂の\textbf{葛飾区}
\end{document}


※japanese-otfを用いない場合も同様で、グローバルオプションにjis2004を指定します。(この場合はpxchfonにのみ適用される。)

※一つの文書中でJIS90とJIS2004の指定を切り替えることはできません。このような場合はjapanese-otfの\CID命令で漢字の特定の字形を指定する必要があります。


注意事項



  • pLaTeX上でかつ「標準8以外の和文VF」を用いる文書クラス(例えばjlreqクラスなど)を利用する場合はSource Han/Noto CJK用のプリセットは使用できません。(upLaTeXでは問題なし。)

  • 「pLaTeXでの使用」「japanese-otfの\CID命令の使用」の機能を利用する場合、pxufontというパッケージを補助に使うので、これもインストールする必要があります(TeX Liveには収録済)。


まとめ

というわけで、Source Han Serif/SansやNoto Serif/Sans CJKを(u)pLaTeX文書で使いたいという人は、最新のTeX Liveをインストールしましょう



【付録】SuperOTC版が使いたい場合

Source Han/Noto CJKのSuperOTC版に対しては、pxchfonはプリセットは用意されていません。しかしpxchfonでは自分でフォントファイル名(とTTC/OTCのインデクス)を指定する機能もあるため、これを用いるとSuperOTC版を利用する設定ができます。ただし以下の点に注意が必要です。


  • pxchfonのオプションとしてunicodeが必要です。また、プリセットを用いないのでnoalphabetも必要です。
    unicodeは“AJ1でないOpenType”を使うためのオプション。Source Han/Noto CJKのプリセットが指定された場合には自動的に有効になる。

  • OpenType Collection中の各フォントのインデクスはバージョンによって変わりえます。例えば、実際にSource Han Sansの1.x版と2.x版ではインデクスの値が異なります。(従って、SuperOTC版の設定をプリセットとして用意するのは困難です。)

SourceHanSerif.ttc(1.001版)とSourceHanSans.ttc (2.001版)を使う例。

\documentclass[uplatex,a4paper]{jsarticle}

\usepackage[deluxe]{otf}% 多書体設定
\usepackage[noalphabet,unicode]{pxchfon}% 後に読み込む
\setlightminchofont[4]{SourceHanSerif.ttc}% Source Han Serif Light
\setmediumminchofont[8]{SourceHanSerif.ttc}% Source Han Serif Regular
\setboldminchofont[20]{SourceHanSerif.ttc}% Source Han Serif Bold
\setmediumgothicfont[15]{SourceHanSans.ttc}% Source Han Sans Regular
\setboldgothicfont[30]{SourceHanSans.ttc}% Source Han Sans Bold
\setxboldgothicfont[40]{SourceHanSans.ttc}% Source Han Sans Black
\begin{document}
\mcfamily % \ltseries で"細字"になる
明朝体の、{\ltseries 細字}と中字と{\bfseries 太字}\par
\gtfamily % \ebseries で"極太"になる
ゴシック体の、中字と{\bfseries 太字}{\ebseries 極太}\par
\end{document}
%※SourceHanSerif.ttcの中の日本語用フォントのインデクス
%0=ExtraLight;4=Light;8=Regular;12=Medium;16=SemiBold;20=Bold;24=Heavy
%※SourceHanSans.ttcの中の日本語用フォントのインデクス
%0=ExtraLight;5=Light;10=Normal;15=Regular;20=Regular☆;25=Medium;30=Bold;35=Bold☆;40=Heavy
%☆は等幅フォント(Source Han Sans HW)

NotoSerifCJK.ttc(1.001版)とNotoSansCJK.ttc (1.004版)を使う例。

\documentclass[uplatex,a4paper]{jsarticle}

\usepackage[deluxe]{otf}% 多書体設定
\usepackage[noalphabet,unicode]{pxchfon}% 後に読み込む
\setlightminchofont[4]{NotoSerifCJK.ttc}% Noto Serif CJK JP Light
\setmediumminchofont[8]{NotoSerifCJK.ttc}% Noto Serif CJK JP Regular
\setboldminchofont[20]{NotoSerifCJK.ttc}% Noto Serif CJK JP Bold
\setmediumgothicfont[12]{NotoSansCJK.ttc}% Noto Sans CJK JP Regular
\setboldgothicfont[24]{NotoSansCJK.ttc}% Noto Sans CJK JP Bold
\setxboldgothicfont[32]{NotoSansCJK.ttc}% Noto Sans CJK JP Black
\begin{document}
\mcfamily % \ltseries で"細字"になる
明朝体の、{\ltseries 細字}と中字と{\bfseries 太字}\par
\gtfamily % \ebseries で"極太"になる
ゴシック体の、中字と{\bfseries 太字}{\ebseries 極太}\par
\end{document}
%※NotoSerifCJK.ttcの中の日本語用フォントのインデクス
%0=ExtraLight;4=Light;8=Regular;12=Medium;16=SemiBold;20=Bold;24=Black
%※NotoSansCJK.ttcの中の日本語用フォントのインデクス
%0=Thin;4=Light;8=DemiLight;12=Regular;16=Regular☆;20=Medium;24=Bold;28=Bold☆;32=Black
%☆は等幅フォント(Noto Sans Mono CJK JP)





  1. 例によって、texdoc dvipdfmx でPDF文書が開きます。 



  2. Source Han同士やNoto CJK同士の異なる版は一つのシステムに混在させるべきではありません(サブセット版を除く)。Source HanとNoto CJKの両方を導入するのは問題ありません。 



  3. 要するに、「同じ書体の別のフォント」が必要なわけです。具体的にいうと、従属欧文の論理フォントを韓国語版のフォントに、クオーテーションマーク用の論理フォントを簡体字中国語版のフォントにマップしています。dvipdfmx側での機能改善があれば、この取扱は変更される予定です。 



  4. 同じウェイトですが、Source Han Sansでは「Heavy」、Noto Sans CJKでは「Black」と呼びます。 



  5. 「Unicodeにある文字の異体字(glyph variant)に相当する字形」については、その一部(例えば漢字のJIS90字形など)に限って、OpenTypeの属性指定でエミュレートして実現しています。 



  6. クラスに対して指定したオプションは原則としてパッケージにも(適用可能であれば)適用されます。このようなクラスオプションの使い方のことを「グローバルオプション」と呼びます。 



  7. pxchfonで2004JIS字体を指定するオプションの名前は従来はprefer2004jisでしたが、1.0a版より、japanese-otfと同じjis2004を別名としてサポートするようになりました。 



  8. 「標準の和文VF」とはmin10系およびjis系の和文VFのこと。