TeX 日本語環境で「源ノ」フォントを使ってみた
さて,TeX Live 2017 インストール後の「$\mathrm{\TeX}$ で遊ぼう」第二弾は
- $\mathrm{\TeX}$ で「源ノ」フォントを使ってみる
である。
「源ノ」フォントとは「源ノ角ゴシック(Source Han Sans)」および「源ノ明朝(Source Han Serif)」で構成される CJK 統一デザインの書体を指す。 「源ノ」フォントは Adobe と Google が共同で開発していて,かつオープンソースで公開されている。 この成果の一部は Google により NOTO プロジェクトに取り込まれている。
いわゆる CJK 漢字圏の文字は漢字だけでも非常に数が多く ☂ や ☃ みたいな非漢字も合わせると想像するだけでも目眩がする。
開発に携われた方々には足を向けて寝られない(何処に足を向けたらいいのだろうw
)。
そして勿論,世の $\mathrm{\TeX}$nician たちがこれに指を咥えて見ているはずはないのだ。
なので私もその成果に便乗することにする。
皆さん,ありがとう!
「源ノ」フォントのインストール
早速インストールをはじめるが,源ノ角ゴシックおよび源ノ明朝は GitHub で公開されている。
- adobe-fonts/source-han-sans: Source Han Sans | 思源黑体 | 思源黑體 | 源ノ角ゴシック | 본고딕
- adobe-fonts/source-han-serif: Source Han Serif | 思源宋体 | 思源宋體 | 源ノ明朝 | 본명조
これらのリポジトリから最新リリース(zip または tar.gz ファイル)をダウンロードする。
1.6 から 2 GB ほどの巨大パッケージなのでダウンロードの際はご注意を。
取得したパッケージの内,今回使うのは OTF/Japanese
フォルダにある以下のファイルである。
- 源ノ角ゴシック
SourceHanSans-ExtraLight.otf
SourceHanSans-Light.otf
SourceHanSans-Normal.otf
SourceHanSans-Regular.otf
SourceHanSans-Medium.otf
SourceHanSans-Bold.otf
SourceHanSans-Heavy.otf
- 源ノ明朝
SourceHanSerif-ExtraLight.otf
SourceHanSerif-Light.otf
SourceHanSerif-Regular.otf
SourceHanSerif-Medium.otf
SourceHanSerif-SemiBold.otf
SourceHanSerif-Bold.otf
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-V
や UniSourceHanSansJP-UTF16-V
という CMap ファイルは存在しないが,まぁ縦書きは使わないから,私。
縦書き用の CMap ファイルはネットを探したらあるかもしれない。
UniJIS2004-UTF16-H
や UniJIS-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
結果はこんな感じ。
ちなみに埋め込まれたフォントの状態は以下の通り。
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
結果は以下の通り。
んー。 ウェイトがさっきと違う?
いや,同じか。 まぁいいや。 「極太」なんてまず使わんし。
他に気になることと言えば, $\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 が使えるのなら支障はないし。
ブックマーク
- The Typekit Blog | Source Han Sansの紹介:オープンソースのPan-CJK書体
- 源ノ明朝
- GoogleとMonotypeが全言語対応フォントのNotoを公開 | TechCrunch Japan
- 日中韓に対応したグーグルの新フォント「Noto Serif CJK」は、なぜ生まれたか|WIRED.jp
- フォント - TeX Wiki
- 源ノ明朝/源ノ角ゴシックをLuaLaTeXで使用する (Windows)
- upLaTeX文書で源ノ明朝/Noto Serif CJKを簡単に使う方法(最新のdvipdfmxとpxchfonを使用) - Qiita
- 小形克宏の「文字の海、ビットの舟」――文字コードが私たちに問いかけるもの
- updmap and kanji - TeX Live - TeX Users Group
参考図書
- [改訂第8版]LaTeX2ε美文書作成入門
- 奥村晴彦 (著), 黒木裕介 (著)
- 技術評論社 2020-11-14
- 大型本
- 4297117126 (ASIN), 9784297117122 (EAN), 4297117126 (ISBN)
- 評価
2020年末に第8版が出てたのに気付かなかったよ。可能なら紙の本も買って常に側に置いておくのが吉。版元には PDF 版もある。
-
CMap とは Unicode 等の文字集合とフォントの CID (Character IDentifier) を対応付けるマッピング情報である。 OpenType フォントのフルセットは Unicode を含む複数の文字集合の字形を包括している。たとえば JIS X 0213 では「葛(U+845B)」の字について2000年版と現行の2004年版で字形が異なるという混乱があるが(厳密には例示字体で示される字の形が異なる。異体字のことではない), OpenType フォント(のフルセット)はそういった差異も包括し CID で識別することができる。従って CMap は文字集合やそのバージョンごとに存在することになる。 ↩︎
-
adobe
,sourcehansansjp
,sourcehanjp
のフォルダ名には特に意味はなく,自分で管理しやすい名前にすればいいらしい。 ↩︎