LaTeX
TeX
TeXLive

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

More than 1 year has passed since last update.

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

ところが、先日(2017-06-04)リリースされたTeX Live 2017に含まれる新しいdvipdfmxにおいて、upLaTeXに限っては、“AJ1でないOpenType-CFFフォント”が比較的容易に利用できるようになっています。

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

※追記[2017-09-14] 最新版のpxchfon(1.1a版)ではpLaTeXでもこれらのフォントが使えるようになりました。またjapanese-otfを併用する場合の制限が緩和されています。詳細は付録を参照してください。

※dvipdfmxの新しい仕様自体に興味がある人は、dvipdfmxのマニュアル(TeX Live 2017で入りました!)を参照1しましょう。

前提

  • TeX Live 2017以降2で、upLaTeX + dvipdfmxを使っている。
    ※dvipdfmxの20170318版以降とpxchfonの1.0版以降がある環境であれば、類似の手順が使えると思われる。
  • コマンドシェル(コマンドプロンプト)の操作に慣れている。

対象のフォント

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

※dvipdfmxの機能上の制限のため、日本語用の設定において、一部、韓国語版や簡体字中国語版のフォント4を指定しています。

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
  • 上記の7つのフォントの韓国語版
    • SourceHanSerifK-Regular.otf など
  • 上記の7つのフォントの簡体字中国語版
    • SourceHanSerifSC-Regular.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
  • 上記の7つのフォントの韓国語版
    • NotoSerifCJKkr-Regular.otf など
  • 上記の7つのフォントの簡体字中国語版
    • NotoSerifCJKsc-Regular.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つのファイルにまとめられています。

フォントファイルの導入

導入するセットの各フォントファイルを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
kpsewhich SourceHanSerifK-Regular.otf
kpsewhich SourceHanSansSC-Heavy.otf
sourcehan-otc
kpsewhich SourceHanSerif-Regular.ttc
kpsewhich SourceHanSans-Heavy.ttc
noto
kpsewhich NotoSerifCJKjp-Regular.otf
kpsewhich NotoSansCJKjp-Black.otf
kpsewhich NotoSerifCJKkr-Regular.otf
kpsewhich NotoSansCJKsc-Black.otf
noto-otc
kpsewhich NotoSerifCJK-Regular.ttc
kpsewhich NotoSansCJK-Black.ttc

手順

  1. 既に対象のフォントが導入済である可能性もあるので、上述の「確認」を行います。
    →導入済であれば何もせず完了
  2. フォントをOSにインストールする場合:
    • 通常の手順で対象フォントをインストールします。具体的な手順はここでは説明しないので、他の文献を参照してください。
  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.の実行で導入済になっているはずです。
  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. 再び「確認」を行います。
    →導入済になっているはずです。

upLaTeX文書の書き方

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

キホン的な場合

文書のプリアンブルでpxchfonパッケージを読み込みます。この際に、自分が導入したセットの名前(sourcehansourcehan-otcnotonoto-otc)をパッケージオプションに入れます(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}
\usepackage[noto]{pxchfon}
% ↓OTF版のNoto Serif/Sans CJKの場合, コレを書く
\begin{document}% Noto Serif/Sans CJK が使われる
{\TeX}\textgt{アレ}、☃は\textgt{非アレ}\end{document}
noto-otcの場合
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[noto-otc]{pxchfon}
% ↓OTC版のNoto Serif/Sans CJKの場合, コレを書く
\begin{document}% Noto Serif/Sans CJK が使われる
{\TeX}\textgt{アレ}、☃は\textgt{非アレ}\end{document}

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

sourcehan-1.png

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

※以降の例ではsourcehan-otcを用いますが、他のセットを用いる場合もプリセットのオプションが異なるだけで文書の他の書き方は全く同じです。

縦組の場合

全く同じ方法で縦組の文書で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}

sourcehan-3.png

※この例では縦組文書クラスとして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}

sourcehan-2.png

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

  • 明朝体:細字=Light、中字=Regular、太字=Bold
  • ゴシック体:中字=Regular、太字=Bold、極太=Heavy/Black5
※japanese-otfの\CID命令は「AJ1のグリフを直接入力する」ための機能であるため、“AJ1でないフォント”であるSource Han/Noto CJKでは利用できません。また、ajmacrosが提供する命令群(\ajナントカの名の命令)は、内部で\CIDを利用するため、これも利用できません。

更新: 最新版のpxchfonでは\CID\ajナントカの命令が使えるようになりました。ただし、Unicodeで扱える範囲に限ります。(pxufontパッケージが必要です。)

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

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

(“丸56”はUnicodeにないので文字化けする)
sourcehan-11.png

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}

sourcehan-4.png

JIS2004字体で出力したい場合は、pxchfonにprefer2004jisオプション、japanese-otfにjis2004オプションを指定します。

JIS2004字体の指定
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[deluxe,jis2004]{otf}
\usepackage[sourcehan-otc,prefer2004jis]{pxchfon}
\begin{document}
% JIS2004字体が用いられる
葛餅で蓬餅で、かつ\textbf{煎餅}\sffamily
巷で噂の\textbf{葛飾区}\end{document}

sourcehan-5.png

※japanese-otfを用いない場合も同様で、pxchfonにprefer2004jisを指定します。
※一つの文書中でJIS90とJIS2004の指定を切り替えることはできません。普通はこういう場合はjapanese-otfの\CID命令を利用するのですが、前述の通り、Source Han/Noto CJKではそれも使えません。

※追記[2017-09-17] ※japanese-otfと併用する場合、pxchfonの1.0a版以降であれば、両方のパッケージにオプション指定する代わりに、グローバルオプションにjis2004を指定することもできます。

JIS2004字体の指定
% グローバルオプションに'jis2004'を追加
\documentclass[uplatex,a4paper,jis2004]{jsarticle}
% パッケージのjis2004/prefer2004jisオプションは不要
\usepackage[deluxe]{otf}
\usepackage[sourcehan-otc]{pxchfon}
\begin{document}
葛餅で蓬餅で、かつ\textbf{煎餅}\sffamily
巷で噂の\textbf{葛飾区}\end{document}

まとめ

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


付録:pLaTeXで使う方法

pxchfonのSource Han/Noto CJK用のプリセットは、従来はupLateX専用でしたが、2017-09-09付の1.1a版より、pLateXでもこれらのプリセットが使えるようになりました。ただしこの場合、pxufontというパッケージを補助に使うので、これもインストールする必要があります(TeX Liveには収録済)。

pLaTeXでSource Hanを使う
% pLaTeX文書
\documentclass[a4paper]{jsarticle}
\usepackage{otf}% japanese-otfも使える
\usepackage[sourcehan-otc]{pxchfon}
\begin{document}
{\TeX}\textgt{アレ}{\ajSnowman}\textgt{非アレ}\end{document}

sourcehan-1.png

CID命令を使う例
% pLaTeX文書
\documentclass[a4paper]{jsarticle}
\usepackage{otf}
\usepackage[sourcehan-otc]{pxchfon}
\begin{document}
\CID{13706}野家的な藤子不二雄\○A。

\ajMaru{42}\ajMaru{56}
\end{document}

(やはり“丸56”はUnicodeにないので使えない)
sourcehan-11.png


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

  2. 正確にいうと「TeX Live 2017の初回アップデート以降」です。 

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

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

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