マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

新しいWindowsのNoto JPフォントをTypstやLaTeXで使う(使えない)件

というわけで、以前に告知されていた「Noto JPフォントWindowsへの搭載」が実施されました。

新しいフォントが増えたとなれば、LaTeX者/Typst者は当然それをLaTeX/Typstで使ってみたいと思うでしょう。本記事はその方法について解説します。

そのフォントは“どういうNotoフォント”なのか

新しいNoto JPフォントのフォントファイルはFontsディレクトリの中にある次の名前のファイルです。

  • NotoSerifJP-VF.ttf
  • NotoSansJP-VF.ttf

NotoのCJK用フォントはイロイロな種類があってヤヤコシイのですが、ファイル名から推測がつく通り、今回搭載されたのは以下のようなバージョンのNotoフォントです。

  • 「CJK JP」版(非サブセット版)ではなく「JP」版(地域別サブセット版の日本用)である。つまり日本語用の文字のみを含んでいる。
  • フォント名は「Noto Serif JP」および「Noto Sans JP」である。
  • TrueTypeグリフである。
  • バリアブルフォントであり、1つのフォントデータで自由にウェイトを指定できる。

各フォントのバリアブルフォントの情報は以下の通りです。

Noto Serif JP(NotoSerifJP-VF.ttf)

  • ウェイト(wght)軸

    • 有効範囲=200~900
    • 既定値=200
  • インスタンス

    インスタンスwght値
    ExtraLight200
    Light300
    Regular400
    Medium500
    SemiBold600
    Bold700
    Black900

Noto Sans JP(NotoSansJP-VF.ttf)

  • ウェイト(wght)軸

    • 有効範囲=100~900
    • 既定値=100
  • インスタンス

    インスタンスwght値
    Thin100
    Light300
    DemiLight350
    Regular400
    Medium500
    Bold700
    Black900

WindowsAPIによるフォント処理では、バリアブルフォントの各インスタンスが別のフォントとして扱われます。例えば、「メモ帳」では「Noto Serif JP」「Noto Sans JP」ともに7つのウェイトが利用可能になります。

そのフォントでTypstしてみる話

TypstではOSにインストールされたフォントが自動的に利用可能になるため、特に何もしなくても新しいNoto JPフォントが使えます。早速使ってみましょう。

#set text(font: "Noto Serif JP")
TeXはアレ、Typstは*非アレ*、☃は素敵。

#set text(font: "Noto Sans JP")
TeXはアレ、Typstは*非アレ*、☃は素敵。

出力結果

アレレ、強調(太字1)指定した部分も含めて全ての文字がとても細い文字になってしまいました😭

このような結果になったのは、そもそもTypstがバリアブルフォントに対応していないからです。非対応のアプリにおいては、バリアブルフォントは「各軸が既定の値をもつ」ような1つのインスタンスだけが利用できる仕様です。前節で説明したバリアブルの情報をみるとSerif・Sansともに最小のウェイトが既定値であることがわかります。

このウェイトだけしか使えないのではチョット実用は厳しそうですね……アッ、でもよく見たら、ゆきだるま☃に限ってはフツーのウェイトになってますね。

☃の部分の出力(素敵😊)

「☃さえ使えれば大丈夫」という本質者には十分役に立つのかもしれません🙃

そのフォントでLaTeXしてみる話

LaTeXのエンジンの中でバリアブルフォントに対応しているのはLuaLaTeXだけなので、以降の話ではLuaLaTeXに限定します。

※LuaLaTeXでバリアブルフォントを使う方法については以下の記事が参考になります。

LuaLaTeXでもOSにインストールされたフォントが利用できますが、そのためには“LuaTeXのフォントデータベース”を更新する必要2があります。

luaotfload -u -v

残念ながら、Windowsアプリのように「登録されているウェイトのインスタンスがそのままLaTeXのシリーズ(\bfseries)として認識される」ようには現状なっていない3ので、WeightInstanceのパラメタを自分で指定する必要があります。

新しいNoto JPフォントをメインの和文フォントとして使用する例を以下に示しました。ここでは敢えてWeight指定とInstance指定の両方を使っています。

  • Noto Serif JPをWeight指定で2ウェイト利用する。
  • Noto Sans JPをInstance指定で3ウェイト利用する。
% LuaLaTeX文書
\documentclass{ltjsarticle}
\usepackage{luatexja-fontspec}
% Weight指定で2ウェイト使用する
\setmainjfont{Noto Serif JP}[
  Weight=300,                            % 中字に300(Light)を充てる
  BoldFont=*, BoldFeatures={Weight=600}, % 太字に600(Semibold)を充てる
]
% Instance指定で3ウェイト使用する
\setsansjfont{Noto Sans JP}[
  Instance=Regular,                         % 中字はRegular
  BoldFont=*, BoldFeatures={Instance=Bold}, % 太字はBold
  FontFace={eb}{n}{Font=*, Instance=Black}, % 極太はBlack
]
\begin{document}
\rmfamily
{\TeX}はアレ、{\LaTeX}\textbf{微アレ}\sffamily
{\TeX}はアレ、{\LaTeX}\textbf{微アレ}% 極太(ebウェイト)に切り替える
☃は{\fontseries{eb}\selectfont 素敵}\end{document}

\setmainjfontのオプションにBoldFont=*という見慣れない記述があります。一般にfontspecのフォント設定命令の仕様として「オプション中のフォント名の中の*はメイン(必須引数)のフォント名に置き換わる」ようになっています。つまりこれはBoldFont=Noto Serif JPと書いたのと同等です。同じ値なので書くのは無駄な気がしますが、これを書かないと「太字のフォントを手動で指定した」ことにならない4ようです。(\setsansjfontBoldFontも同様。)

出力結果

書き方は少し面倒ですが、無事に使えました🙂 めでたしめでたし……

……と言いたいところですがここで大きな問題があります。

そもそもLuaLaTeXの既定の
和文フォントは「原ノ味フォント」で
これはNotoフォントと“同じ書体5”である。

つまり「Noto JPフォント」と同じ書体は昔からずっと使える状態になっているわけで、これではあまりメリットが感じられません。もちろんバリアブルなNoto JPフォントはウェイトが自由に決められるのでそれは強みなのですが、原ノ味フォントも7ウェイトあるのでそれで十分6な気もします。

原ノ味フォントは文字をAJ1の範囲に限定しているので「Noto JPの方が収録する文字が多い」というメリットも考えられます。とはいっても、先述の通りNoto JPの方も「日本用サブセット版」であるため、AJ1にない文字(で和文として有用そうなもの)はそんなに多くありません。

Noto JPだけで使える和文文字

というわけで、LaTeX者にとっては“ありがたみ”が乏しいかもしれません😑

まとめ

ざんねん🙃


  1. Typstの既定動作では強い強調(strongエレメント)は太字として出力されます。
  2. 正確にいうと、fontspecにおいて「フォント名」で指定する場合にはデータベース更新が必要ですが、「ファイル名」で指定する場合は不要です。mktexlsrは一般的には必要ですが、OSのフォントディレクトリについてはmktexlsrも不要です。
  3. もしなっているなら、\setmainjfont{Noto Serif JP}と書くだけでRegularとBoldの2ウェイトが使えるはずです。
  4. 先述の通り自動では指定されないので、BoldFont=*を書かずにBoldFeaturesだけ書いた場合は結局太字の指定は無効になります。
  5. Noto JPフォントはGoogleAdobeが共同開発したもので、Googleがリリースしたものが「Noto JPフォント」、Adobeがリリースしたものが「源ノ明朝・角ゴシック」と別の名前が付いています。そして「原ノ味フォント」は「源ノ明朝・角ゴシック」を加工して作られた派生フォントです。
  6. 欧文とのウェイトのバランスを微調整できるのは大きなメリットになるかもしれません。