TeX 日本語環境で「源ノ」フォントを使ってみた

no extension

さて,TeX Live 2017 インストール後の「$\mathrm{\TeX}$ で遊ぼう」第二弾は

  • $\mathrm{\TeX}$ で「源ノ」フォントを使ってみる

である。

「源ノ」フォントとは「源ノ角ゴシック(Source Han Sans)」および「源ノ明朝(Source Han Serif)」で構成される CJK 統一デザインの書体を指す。 「源ノ」フォントは Adobe と Google が共同で開発していて,かつオープンソースで公開されている。 この成果の一部は Google により NOTO プロジェクトに取り込まれている。

いわゆる CJK 漢字圏の文字は漢字だけでも非常に数が多く ☂ や ☃ みたいな非漢字も合わせると想像するだけでも目眩がする。 開発に携われた方々には足を向けて寝られない(何処に足を向けたらいいのだろうw)。 そして勿論,世の $\mathrm{\TeX}$nician たちがこれに指を咥えて見ているはずはないのだ。 なので私もその成果に便乗することにする。

皆さん,ありがとう!

「源ノ」フォントのインストール

早速インストールをはじめるが,源ノ角ゴシックおよび源ノ明朝は GitHub で公開されている。

これらのリポジトリから最新リリース(zip または tar.gz ファイル)をダウンロードする。 1.6 から 2 GB ほどの巨大パッケージなのでダウンロードの際はご注意を。 取得したパッケージの内,今回使うのは OTF/Japanese フォルダにある以下のファイルである。

  • 源ノ角ゴシック
    1. SourceHanSans-ExtraLight.otf
    2. SourceHanSans-Light.otf
    3. SourceHanSans-Normal.otf
    4. SourceHanSans-Regular.otf
    5. SourceHanSans-Medium.otf
    6. SourceHanSans-Bold.otf
    7. SourceHanSans-Heavy.otf
  • 源ノ明朝
    1. SourceHanSerif-ExtraLight.otf
    2. SourceHanSerif-Light.otf
    3. SourceHanSerif-Regular.otf
    4. SourceHanSerif-Medium.otf
    5. SourceHanSerif-SemiBold.otf
    6. SourceHanSerif-Bold.otf
    7. SourceHanSerif-Heavy.otf

それぞれのファイルの違いはウェイトの違いで,軽いものから昇順に並べている。 さらに各パッケージ内の Resources フォルダにある以下の CMap ファイル1 も使用する。

これらのファイルを,以下のフォルダを作成して放り込む2

  • 源ノ角ゴシック{$TEXMFLOCAL}/fonts/opentype/adobe/sourcehansansjp/
  • 源ノ明朝{$TEXMFLOCAL}/fonts/opentype/adobe/sourcehanserifjp/
  • CMap ファイル: {$TEXMFLOCAL}/fonts/cmap/sourcehanjp/

ちなみに $TEXMFLOCAL の場所は kpsewhich コマンドで調べられる。 いつもの場所だね。

$ kpsewhich -var-value=TEXMFLOCAL
C:/texlive/texmf-local

コピーできたら mktexlsr コマンドを実行して ls-R を更新しておくことを忘れずに。

$ mktexlsr
mktexlsr: Updating C:/texlive/texmf-local/ls-R...
mktexlsr: Updated C:/texlive/texmf-local/ls-R.
mktexlsr: Updating C:/texlive/2017/texmf-config/ls-R...
mktexlsr: Updated C:/texlive/2017/texmf-config/ls-R.
mktexlsr: Updating C:/texlive/2017/texmf-var/ls-R...
mktexlsr: Updated C:/texlive/2017/texmf-var/ls-R.
mktexlsr: Updating C:/texlive/2017/texmf-dist/ls-R...
mktexlsr: Updated C:/texlive/2017/texmf-dist/ls-R.
mktexlsr: Done.

これで「源ノ」フォントのインストールは完了。 一応 kpsewhich コマンドでインストールできたかどうか確認しておくとよい。

$ kpsewhich SourceHanSerif-Regular.otf
c:/texlive/texmf-local/fonts/opentype/adobe/sourcehanserifjp/SourceHanSerif-Regular.otf

upLaTeX で「源ノ」フォントを使ってみる

では文書ファイルを用意しよう。 こんな感じでどうだろうか。

\documentclass[uplatex,a4paper]{jsarticle}
\usepackage[deluxe]{otf}

\begin{document}

{\mcfamily\ltseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・細字)}\par
{\mcfamily          ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・中字)}\par
{\mcfamily\bfseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・太字)}\par

{\gtfamily          ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・中字)}\par
{\gtfamily\bfseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・太字)}\par
{\gtfamily\ebseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・極太)}

森鷗外と内田百閒が髙島屋に行った。

\UTF{845B}飾区の\UTF{20BB7}野家  % 葛飾区の𠮷野家

\end{document}

タイプセット処理は $\mathrm{up\LaTeX}$ を選択した。 $\mathrm{up\LaTeX}$ で処理したあと dvipdfmx コマンドで PDF に変換しないといけないんだけど,「源ノ」フォント用の map ファイルは TeX Live 2017 には存在しないようなので,自前で用意しないといけない。 他の書体の map ファイルを参考に自作してみた(正しいかどうかわからないが)。

% CID
otf-cjml-h    Identity-H    SourceHanSerif-Light.otf
otf-cjml-v    Identity-V    SourceHanSerif-Light.otf
otf-cjmr-h    Identity-H    SourceHanSerif-Regular.otf
otf-cjmr-v    Identity-V    SourceHanSerif-Regular.otf
otf-cjmb-h    Identity-H    SourceHanSerif-Bold.otf
otf-cjmb-v    Identity-V    SourceHanSerif-Bold.otf
otf-cjgr-h    Identity-H    SourceHanSans-Regular.otf
otf-cjgr-v    Identity-V    SourceHanSans-Regular.otf
otf-cjgb-h    Identity-H    SourceHanSans-Bold.otf
otf-cjgb-v    Identity-V    SourceHanSans-Bold.otf
otf-cjge-h    Identity-H    SourceHanSans-Heavy.otf
otf-cjge-v    Identity-V    SourceHanSans-Heavy.otf
otf-cjmgr-h   Identity-H    SourceHanSans-Heavy.otf
otf-cjmgr-v   Identity-V    SourceHanSans-Heavy.otf

% Unicode 90JIS
otf-ujml-h    UniSourceHanSerifJP-UTF16-H   SourceHanSerif-Light.otf
otf-ujml-v    UniSourceHanSerifJP-UTF16-V   SourceHanSerif-Light.otf
otf-ujmr-h    UniSourceHanSerifJP-UTF16-H   SourceHanSerif-Regular.otf
otf-ujmr-v    UniSourceHanSerifJP-UTF16-V   SourceHanSerif-Regular.otf
otf-ujmb-h    UniSourceHanSerifJP-UTF16-H   SourceHanSerif-Bold.otf
otf-ujmb-v    UniSourceHanSerifJP-UTF16-V   SourceHanSerif-Bold.otf
otf-ujgr-h    UniSourceHanSansJP-UTF16-H    SourceHanSans-Regular.otf
otf-ujgr-v    UniSourceHanSansJP-UTF16-V    SourceHanSans-Regular.otf
otf-ujgb-h    UniSourceHanSansJP-UTF16-H    SourceHanSans-Bold.otf
otf-ujgb-v    UniSourceHanSansJP-UTF16-V    SourceHanSans-Bold.otf
otf-ujge-h    UniSourceHanSansJP-UTF16-H    SourceHanSans-Heavy.otf
otf-ujge-v    UniSourceHanSansJP-UTF16-V    SourceHanSans-Heavy.otf
otf-ujmgr-h   UniSourceHanSansJP-UTF16-H    SourceHanSans-Heavy.otf
otf-ujmgr-v   UniSourceHanSansJP-UTF16-V    SourceHanSans-Heavy.otf

% Unicode JIS04
otf-ujmln-h    UniJIS2004-UTF16-H    SourceHanSerif-Light.otf
otf-ujmln-v    UniJIS2004-UTF16-V    SourceHanSerif-Light.otf
otf-ujmrn-h    UniJIS2004-UTF16-H    SourceHanSerif-Regular.otf
otf-ujmrn-v    UniJIS2004-UTF16-V    SourceHanSerif-Regular.otf
otf-ujmbn-h    UniJIS2004-UTF16-H    SourceHanSerif-Bold.otf
otf-ujmbn-v    UniJIS2004-UTF16-V    SourceHanSerif-Bold.otf
otf-ujgrn-h    UniJIS2004-UTF16-H    SourceHanSans-Regular.otf
otf-ujgrn-v    UniJIS2004-UTF16-V    SourceHanSans-Regular.otf
otf-ujgbn-h    UniJIS2004-UTF16-H    SourceHanSans-Bold.otf
otf-ujgbn-v    UniJIS2004-UTF16-V    SourceHanSans-Bold.otf
otf-ujgen-h    UniJIS2004-UTF16-H    SourceHanSans-Heavy.otf
otf-ujgen-v    UniJIS2004-UTF16-V    SourceHanSans-Heavy.otf
otf-ujmgrn-h   UniJIS2004-UTF16-H    SourceHanSans-Heavy.otf
otf-ujmgrn-v   UniJIS2004-UTF16-V    SourceHanSans-Heavy.otf

% TEXT, 90JIS
uphminl-h   UniSourceHanSerifJP-UTF16-H SourceHanSerif-Light.otf
uphminl-v   UniSourceHanSerifJP-UTF16-V SourceHanSerif-Light.otf
uphminr-h   UniSourceHanSerifJP-UTF16-H SourceHanSerif-Regular.otf
uphminr-v   UniSourceHanSerifJP-UTF16-V SourceHanSerif-Regular.otf
uphminb-h   UniSourceHanSerifJP-UTF16-H SourceHanSerif-Bold.otf
uphminb-v   UniSourceHanSerifJP-UTF16-V SourceHanSerif-Bold.otf
uphgothr-h  UniSourceHanSansJP-UTF16-H  SourceHanSans-Regular.otf
uphgothr-v  UniSourceHanSansJP-UTF16-V  SourceHanSans-Regular.otf
uphgothb-h  UniSourceHanSansJP-UTF16-H  SourceHanSans-Bold.otf
uphgothb-v  UniSourceHanSansJP-UTF16-V  SourceHanSans-Bold.otf
uphgotheb-h UniSourceHanSansJP-UTF16-H  SourceHanSans-Heavy.otf
uphgotheb-v UniSourceHanSansJP-UTF16-V  SourceHanSans-Heavy.otf
uphmgothr-h UniSourceHanSansJP-UTF16-H  SourceHanSans-Heavy.otf
uphmgothr-v UniSourceHanSansJP-UTF16-V  SourceHanSans-Heavy.otf

% TEXT, JIS04
uphminln-h  UniJIS2004-UTF16-H  SourceHanSerif-Light.otf
uphminln-v  UniJIS2004-UTF16-V  SourceHanSerif-Light.otf
uphminrn-h  UniJIS2004-UTF16-H  SourceHanSerif-Regular.otf
uphminrn-v  UniJIS2004-UTF16-V  SourceHanSerif-Regular.otf
uphminbn-h  UniJIS2004-UTF16-H  SourceHanSerif-Bold.otf
uphminbn-v  UniJIS2004-UTF16-V  SourceHanSerif-Bold.otf
uphgothrn-h UniJIS2004-UTF16-H  SourceHanSans-Regular.otf
uphgothrn-v UniJIS2004-UTF16-V  SourceHanSans-Regular.otf
uphgothbn-h UniJIS2004-UTF16-H  SourceHanSans-Bold.otf
uphgothbn-v UniJIS2004-UTF16-V  SourceHanSans-Bold.otf
uphgothebn-h    UniJIS2004-UTF16-H  SourceHanSans-Heavy.otf
uphgothebn-v    UniJIS2004-UTF16-V  SourceHanSans-Heavy.otf
uphmgothrn-h    UniJIS2004-UTF16-H  SourceHanSans-Heavy.otf
uphmgothrn-v    UniJIS2004-UTF16-V  SourceHanSans-Heavy.otf

urml    UniSourceHanSerifJP-UTF16-H SourceHanSerif-Regular.otf
urmlv   UniSourceHanSerifJP-UTF16-V SourceHanSerif-Regular.otf
ugbm    UniSourceHanSansJP-UTF16-H  SourceHanSans-Medium.otf
ugbmv   UniSourceHanSansJP-UTF16-V  SourceHanSans-Medium.otf
uprml-h UniSourceHanSerifJP-UTF16-H SourceHanSerif-Regular.otf
uprml-v UniSourceHanSerifJP-UTF16-V SourceHanSerif-Regular.otf
upgbm-h UniSourceHanSansJP-UTF16-H  SourceHanSans-Medium.otf
upgbm-v UniSourceHanSansJP-UTF16-V  SourceHanSans-Medium.otf
uprml-hq    UniJIS-UCS2-H   SourceHanSerif-Regular.otf
upgbm-hq    UniJIS-UCS2-H   SourceHanSans-Medium.otf

% TEXT, 90JIS
hminl-h     H    SourceHanSerif-Light.otf
hminl-v     V    SourceHanSerif-Light.otf
hminr-h     H    SourceHanSerif-Regular.otf
hminr-v     V    SourceHanSerif-Regular.otf
hminb-h     H    SourceHanSerif-Bold.otf
hminb-v     V    SourceHanSerif-Bold.otf
hgothr-h    H    SourceHanSans-Regular.otf
hgothr-v    V    SourceHanSans-Regular.otf
hgothb-h    H    SourceHanSans-Bold.otf
hgothb-v    V    SourceHanSans-Bold.otf
hgotheb-h   H    SourceHanSans-Heavy.otf
hgotheb-v   V    SourceHanSans-Heavy.otf
hmgothr-h   H    SourceHanSans-Heavy.otf
hmgothr-v   V    SourceHanSans-Heavy.otf

% TEXT, JIS04
hminln-h    H    SourceHanSerif-Light.otf
hminln-v    V    SourceHanSerif-Light.otf
hminrn-h    H    SourceHanSerif-Regular.otf
hminrn-v    V    SourceHanSerif-Regular.otf
hminbn-h    H    SourceHanSerif-Bold.otf
hminbn-v    V    SourceHanSerif-Bold.otf
hgothrn-h   H    SourceHanSans-Regular.otf
hgothrn-v   V    SourceHanSans-Regular.otf
hgothbn-h   H    SourceHanSans-Bold.otf
hgothbn-v   V    SourceHanSans-Bold.otf
hgothebn-h  H    SourceHanSans-Heavy.otf
hgothebn-v  V    SourceHanSans-Heavy.otf
hmgothrn-h  H    SourceHanSans-Heavy.otf
hmgothrn-v  V    SourceHanSans-Heavy.otf

分かりにくいとは思うが,フォントの選択は以下のように対応付けている。

字体とウエイト フォント名
明朝体・細字 SourceHanSerif-Light.otf
明朝体・中字 SourceHanSerif-Regular.otf
明朝体・太字 SourceHanSerif-Bold.otf
ゴシック体・中字 SourceHanSans-Regular.otf
ゴシック体・太字 SourceHanSans-Bold.otf
ゴシック体・極太 SourceHanSans-Heavy.otf

また UniSourceHanSerifJP-UTF16-VUniSourceHanSansJP-UTF16-V という CMap ファイルは存在しないが,まぁ縦書きは使わないから,私。 縦書き用の CMap ファイルはネットを探したらあるかもしれない。 UniJIS2004-UTF16-HUniJIS-UCS2-H は他のフォントの設定をそのまま流用してるけど,正しいのかどうかよく分からない。

dvipdfmx コマンドで map ファイルを直接指定する必要があるため .latexmkrc ファイルを以下のように設定した。

#!/usr/bin/env perl
$latex        = 'uplatex -synctex=1';
$latex_silent = 'uplatex -synctex=1 -interaction=batchmode';
$bibtex       = 'upbibtex';
$biber        = 'biber --bblencoding=utf8 -u -U --output_safechars';
$dvipdf       = 'dvipdfmx -z9 -V 4 -f sourcehanjp.map %O -o %D %S';
$makeindex    = 'mendex %O -o %D %S';
$max_repeat   = 5;
$pdf_mode     = 3; # generates pdf via dvipdfmx

$pvc_view_file_via_temporary = 0;

ようやく準備完了。 やっとビルドできるよ。

$ latexmk otf-sample.tex

結果はこんな感じ。

Output PDF by upLaTeX with Source Han Fonts (1)

ちなみに埋め込まれたフォントの状態は以下の通り。

Output PDF by upLaTeX with Source Han Fonts (2)

LuaLaTeX で「源ノ」フォントを使ってみる

さて,では同じことを $\mathrm{Lua\LaTeX}$-ja でやってみようと思う。

さきほどフォントファイルをインストールしたが, $\mathrm{Lua\LaTeX}$ で使うにはそのままではダメで,以下のコマンドを実行しておく必要がある。

$ luaotfload-tool --update

上手くいったかどうかは以下のコマンドで確認できる。

$ luaotfload-tool --fuzzy --find="sourcehanserif"
luaotfload | resolve : Font "sourcehanserif" found!
luaotfload | resolve : Resolved file name "c:/texlive/texmf-local/fonts/opentype/adobe/sourcehanserifjp/sourcehanserif-regular.otf"

では,文書ファイルを作ってみよう。

\documentclass{ltjsarticle}
\usepackage[sourcehan,deluxe]{luatexja-preset}
\usepackage{luatexja-otf}

\begin{document}

{\mcfamily\ltseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・細字)}\par
{\mcfamily          ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・中字)}\par
{\mcfamily\bfseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・太字)}\par

{\gtfamily          ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・中字)}\par
{\gtfamily\bfseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・太字)}\par
{\gtfamily\ebseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・極太)}

森鷗外と内田百閒が髙島屋に行った。

\UTF{845B}飾区の\UTF{20BB7}野家  % 葛飾区の𠮷野家

\end{document}

luatexja-preset パッケージでは「源ノ」フォントを指定できる。

\usepackage[sourcehan]{luatexja-preset}

また \UTF コマンドが使えるように luatexja-otf パッケージを読み込んでいる。 いやぁ,すんごい楽ちん。

タイプセットも前準備なしで簡単にできる(だだし,めがっさ遅い)。

$ lualatex otf-sample.tex

結果は以下の通り。

Output PDF by LuaLaTeX with Source Han Fonts (1)

んー。 ウェイトがさっきと違う?

Output PDF by LuaLaTeX with Source Han Fonts (2)

いや,同じか。 まぁいいや。 「極太」なんてまず使わんし。

他に気になることと言えば, $\mathrm{up\LaTeX}$ + dvipdfmx のときもそうだったんだけど,「葛(U+845B)」の字形が JIS X 0213:2004 だよね。 どちらも jis2004 オプションは付けてないんだが。 やはり jis2004 オプションは相当特殊な気がする。 これからは JIS X 0213:2004 前提で考えて,むしろ jis2000 オプションを作ったほうがいいんじゃないだろうか。

ま,それはともかく

時代は $\mathrm{Lua\TeX}$ で「源ノ」フォント ってことですね!

ちなみに,前回紹介した Cloud LaTeX で同じことをしようとしたら「sourcehan なんぞ知らん!」と怒られた(笑)

/usr/local/texlive/2016/texmf-dist/tex/latex/fontspec/fontspec-luatex.sty
line 392
! LaTeX Error: Unknown option `sourcehan' for package `fontspec-luatex'.

まぁしょうがないね。 IPAex が使えるのなら支障はないし。

ブックマーク

参考図書

photo
[改訂第8版]LaTeX2ε美文書作成入門
奥村晴彦 (著), 黒木裕介 (著)
技術評論社 2020-11-14
大型本
4297117126 (ASIN), 9784297117122 (EAN), 4297117126 (ISBN)
評価     

2020年末に第8版が出てたのに気付かなかったよ。可能なら紙の本も買って常に側に置いておくのが吉。版元には PDF 版もある。

reviewed by Spiegel on 2021-09-05 (powered by PA-APIv5)


  1. CMap とは Unicode 等の文字集合とフォントの CID (Character IDentifier) を対応付けるマッピング情報である。 OpenType フォントのフルセットは Unicode を含む複数の文字集合の字形を包括している。たとえば JIS X 0213 では「葛(U+845B)」の字について2000年版と現行の2004年版で字形が異なるという混乱があるが(厳密には例示字体で示される字の形が異なる。異体字のことではない), OpenType フォント(のフルセット)はそういった差異も包括し CID で識別することができる。従って CMap は文字集合やそのバージョンごとに存在することになる。 ↩︎

  2. adobe, sourcehansansjp, sourcehanjp のフォルダ名には特に意味はなく,自分で管理しやすい名前にすればいいらしい。 ↩︎