以下の内容はhttps://ho-tori.hateblo.jp/entry/2025/04/20/010301より取得しました。


LuaLaTeXで日本語フォントを設定する(luatexja-fontspecの使い方):LaTeX

[2025/05/07追記]記事の題名を変更しました。[追記終わり]

[2025/04/25追記]記事のレイアウトを一部変更しました。[追記終わり]

本記事では、luatexja-fontspecパッケージを使ってLuaLaTeXにて日本語フォントを設定する方法を述べる。

もっともこの内容に関しては、すでに多くのネット上の記事があるため、そちらを参考にしてもらったほうがいいのかもしれない。

【初級】fontspecでフォントを自由に設定しよう (1) - LuaLaTeX Lab

【初級】fontspecでフォントを自由に設定しよう (2) - LuaLaTeX Lab

【初級】fontspecでフォントを自由に設定しよう (3) - LuaLaTeX Lab

【初級】fontspecでフォントを自由に設定しよう (4) - LuaLaTeX Lab

【初級】fontspecでフォントを自由に設定しよう (5) - LuaLaTeX Lab

【初級】fontspecでフォントを自由に設定しよう (6) - LuaLaTeX Lab

luatexja-fontspec:\setmainfont - グズてつのぼやき

新しいWindowsのNoto JPフォントをTypstやLaTeXで使う(使えない)件 - マクロツイーター

「pLaTeXからLuaLaTeXへの移行」に関するクイズ #LaTeX - Qiita

LuaLaTeX でフォント細かく変更する方法(MS Word は使いたくない!) #font - Qiita

LuaLaTeXのすゝめ | Daiji256

QA: 游教科書体をluatex-jaで使いたいです. | TeX

和文フォントしたい(luatexja-fontspec) — KumaROOT v1.44.3

注意

  • luatexja-fontspecパッケージはLuaLaTeX専用であるため、pLaTeXやupLaTeXなどでは使えない。十分に注意されたい。
  • 本記事では欧文フォントや数式フォントの設定については一切取り扱わない。
  • LuaLaTeXやその関連パッケージによってだいぶ楽になったものの、LaTeXにおけるフォントの設定は依然として面倒である。したがって、以下の記述も若干込み入ったものになっている。面倒な手続きを踏まずに、数クリックでパッとフォントを変えたい場合はLaTeXを使うべきではないかもしれない。Microsoft Wordや類似するソフトウェアに乗り換えることを検討されたい。

パッケージの読み込み

LuaLaTeXで日本語フォントを設定するluatexja-fontspecパッケージを使うためには、以下のようにして読み込めば良い。

\usepackage{luatexja-fontspec}

日本語の書体の類型

まずフォントを設定する前に、日本語フォントの基本的な話と、LaTeXにおけるフォント機構についてざっと述べる。なお、以下で記すことはかなり色々省いているため実質嘘みたいな話をしているが、説明の便宜によるものであると捉えてほしい*1

LaTeXにて日本語を扱う場合、次の三つの書体が基本となる。すなわち明朝体ゴシック体等幅体である*2

明朝体(左)とゴシック体(右)。

明朝体は、主に本文に用いられる。対して、ゴシック体は主に見出し等に用いられる。また、主にソースコードを記述する用途として、等幅体が使われる*3

基本的にこの三書体で運用する。

これらに加えて、各書体に太字イタリックを適用して字形を変更することもできる。もちろん太字かつイタリックもできるから、これらを使えば各書体にはそれぞれ少なくとも4パターンの表現方法があることになる(通常、太字、イタリック、太字イタリック)。

結局、三書体×4パターンで計12パターンの表現方法がある。

luatexja-fontspecではそれぞれに特定のフォントを割り当てる機能を提供している。

なお、LuaLaTeXでフォントを使う場合は、フォントがシステムにインストールされているか、フォントファイルがTeXに認識されるよう適切に配置されている必要があることに注意。

フォントの設定

各書体について、通常使われるフォントは次のように設定する。

あるフォントを明朝体に割り当てる場合には\setmainjfont{フォント名}ゴシック体に割り当てる場合には\setsansjfont{フォント名}等幅体に割り当てる場合には\setmonojfont{フォント名}を用いる。

\setmainjfont[オプション]{フォント名}  % 明朝体
\setsansjfont[オプション]{フォント名}  % ゴシック体
\setmonojfont[オプション]{フォント名}  % 等幅体

フォント名に入るのは通常使用する(太字やイタリックではない)フォントの名前である*4。つまり、以下の黄色で塗られたところが設定される。

例えば、通常の明朝体に「游明朝 Regular」を、ゴシック体に「游ゴシック Regular」を割り当てる場合、次のようである。

\setmainjfont{YuMincho-Regular}
\setsansjfont{YuGothic-Regular}

フォント設定のオプション

\setmainjfont\setsansjfont\setmonojfont[]内にオプションを指定することができる。主要なオプションは以下の通りである。

BoldFont=フォント名

このBoldFont=フォント名というオプションは、各書体の太字フォントを指定する。つまり\textbf\bfseriesとしたときに使われるフォントを指定する。

使い方は、例えば以下の通りである。

\setmainjfont[BoldFont=YuMincho-Demibold]{YuMincho-Regular}

この例では、通常の明朝体YuMincho-Regularを、明朝体の太字にYuMincho-Demiboldを指定している。

ItalicFont=フォント名

ItalicFont=フォント名というオプションは、各書体のイタリック体のフォントを指定する。つまり\textit{}\itshapeとしたときに使われるフォントを指定する。

しかしながら、通常日本語フォントにイタリック体は用意されていない。というわけで、後述のAutoFakeSlantを使うと良い。

なお太字イタリックを設定するBoldItalicFontなるオプションもあるが、事情は変わらないので説明省略。

AutoFakeSlant=数値

AutoFakeSlant=数値は疑似イタリックを設定するとともに、その傾け方を指定するオプションである。

通常日本語のフォントには(欧文でいう)イタリック体は用意されていない。そこで、通常の直立体のフォントを傾けて、疑似的なイタリック体を使うという方法がある(参考:LaTeXで和文を斜体する話(1) - マクロツイーター

AutoFakeSlant=数値は、これを実現するためのオプションである。これを指定すると、イタリック体として指定された箇所が数値だけ傾いた疑似イタリック体として組まれる(数値は0.1~0.5あたりを指定すると良い)。

太字イタリックに関する挙動について

AutoFakeSlantを指定した場合、太字イタリックについても疑似イタリックで組まれることが期待される。しかしながら、現在のfontspecパッケージはそのような挙動にはなっておらず、AutoFakeSlantは太字イタリックには有効ではない。

github.com

そのため、若干面倒だがAutoFakeSlantに加えて以下をオプションとして指定する必要がある。

BoldItalicFeatures={Font=太字フォント名,FakeSlant=数値}

Autoのつかない)FakeSlantは、そのフォントを疑似的に傾けるオプションである。

例:明朝体の通常フォントに「游明朝 Regular」を、太字フォントに「游明朝 Demibold」を指定し、またそれぞれのイタリック体として0.2傾けた疑似イタリック体を指定する。

\setmainjfont[
    BoldFont=YuMincho-Demibold,
    AutoFakeSlant=0.2,
    BoldItalicFeatures={Font=YuMincho-Demibold,FakeSlant=0.2},
]{YuMincho-Regular}

BoldFeatures BoldItalicFeatures UprightFeatures ItalicFeatures YokoFeatures TateFeatures

それぞれ太字、太字イタリック、直立(通常)、イタリック、横書き、縦書きのときにだけに有効なオプションを指定するオプションである。細かい指定を行う際に使用する。BoldFeatures={オプション}のように使う。上では太字イタリックだけに有効なオプションを設定するためにBoldItalicFeaturesを使用した。

主要なオプションは以上の通りである。それ以外でよく使うオプションは下に記す(三角印をクリックして展開せよ)。

その他の主要なオプション

AutoFakeBold=数値

AutoFakeBold=数値は疑似太字を設定するとともに、その太さを指定するオプションである。

フォントによっては、太字フォントがない場合がある。このような場合であっても、疑似的に線を太くして、太字を使用することができる。次の例では、通常フォントに「游明朝 Regular」を、太字フォントにこれを疑似的に2倍に太くしたフォントを指定している。

\setmainjfont[AutoFakeBold=2.0]{YuMincho-Regular}

しかしこれは疑似的に線を太くしているだけなので、たいてい見栄えが悪くなる。太字フォントが用意されている場合はそれを使用すること。

UprightFont=フォント名

UprightFontは通常の字形のフォントを指定するオプションである。通常のフォントは普通オプションで指定せず{}内で指定するが、このオプションが指定されている場合こちらが優先される。

各コマンドの{}内のフォント名は、オプション内で*として参照することができるので、これを利用して、コードをスマートに書くことができる。例えば、次の2つはまったく等価である。

\setmainjfont[BoldFont=YuMincho-DemiBold]{YuMincho-Regular}
\setmainjfont[UprightFont=*-Regular,BoldFont=*-Demibold]{YuMincho}

Extension

ファイル名でフォントを指定する場合、いちいち拡張子を書くのは面倒である。Extensionを使うとフォント指定オプションにおける拡張子の表記を省略できる。例えば、次の3つはまったく等価である。

\setmainjfont[BoldFont=yumindb.ttf]{yumin.ttf}
\setmainjfont[Extension=.ttf,BoldFont=yumindb]{yumin}
\setmainjfont[Extension=.ttf,UprightFont=*,BoldFont=*db]{yumin}

以上で説明したコマンドならびにオプションを駆使すれば、日本語フォントの基本的な設定は可能である。

フォント名をどうやって取得するか

上で見た通り、フォントを指定する際にはフォントの名前をもって指定する必要がある。しかしながら、フォントの名前というのはどこで取得できるのだろうか?例えば上で「游明朝 Regular」を指定する際にはYuMincho-Regularと指定しているが、こうした名前はどこからゲットしたのか?Yu Min游明朝 Regularではダメなのか?(実際ダメ)

この点は若干厄介であるから、十分注意されたい。

結論を述べれば、luatexja-fontspecを使ってフォント名を指定する際には、以下のいずれかの方法を用いて指定すると良いようである(なお、以下の方法のほかにもいくつか方法があるうえに、また案外柔軟に認識してくれるようではある)。

1. フォントファイル名を指定する

第一に、フォントファイルそのものの名前を指定するという方法がある。

現代のコンピュータのフォントファイルはたいていOpenTypeフォントTrueTypeフォントのいずれかである。これらのフォントファイルは.ttfもしくは.otfという拡張子を持っている。

Windowsの場合、システムに付属しているフォントはC:\WINDOWS\Fonts以下に格納されている(ただしこのフォルダは特殊なフォルダである)。別途インストールした場合はC:\Users\USERNAME\AppData\Local\Microsoft\Windows\Fonts\に格納されている場合もある。こうしたフォルダから所望のフォントに対応するフォントファイルを何らかの方法を使って見つけだし、そのファイル名をもって指定する。

例えば、Windowsに付属している「游明朝 Regular」の実体はC:\WINDOWS\Fonts\yumin.ttf、「游明朝 DemiBold」の実体はC:\WINDOWS\Fonts\yumindb.ttfである。これらを指定したい場合、次のようである。

\setmainjfont[BoldFont=yumindb.ttf]{yumin.ttf}

システムにインストールされているフォントのファイル名がわからない場合は、以下を参照せよ(三角印をクリックして展開せよ)。

フォントに対応するフォントファイルを見つけ出す方法

フォントに対応するフォントファイルを見つけ出す方法

インターネット上から落としてきて、インストールしたフォントであれば、そのファイル名を知るのは容易である。しかしながら、OSにデフォルトでインストールされているフォントのファイル名を知るのは若干面倒である。手順はOSによって異なるが、Windows 11の場合は次の方法を用いることができる*5

まず、エクスプローラーからC:\WINDOWS\Fonts\なるフォルダにアクセスする。OSにインストールされているフォントが一覧表示されるので、ここから所望のフォントを探す。

C:\WINDOWS\Fonts\を開いた様子。この中から使いたいフォントを探す。

発見できれば、右クリックして「プロパティ」を開き、一番上に表示される「ファイル名」を確認する。もし右クリックして「プロパティ」が出てこない場合は、当該ファイルをダブルクリックしてから所望のウェイトのフォントファイルを右クリックすればよい。

フォント名を右クリックしても「プロパティ」が出てこない場合にダブルクリックするとこのような画面になる。

フォントファイルのプロパティ。赤線で囲まれた部分がファイル名なので、これをメモする。

ここで得られた「ファイル名」が所望のフォントのファイル名である。\setmainjfont{}やそのオプションなどでフォントをそのファイル名を指定する場合は、これで指定すればよい。

所望のフォントファイルに.ttf.otf(もしくは.TTF.OTF)という拡張子がついている場合はこれでオッケーだが、拡張子が.ttc.otc(もしくは.TTC.OTC)の場合は、下記に記す注意に従うこと(三角印をクリックして展開せよ)。

なお、フォントファイルの拡張子が.ttc.otcの場合には以下に注意せよ(三角印をクリックして展開せよ)。

⚠️.ttc.otcの場合⚠️

フォントファイルには、.ttc.otcという拡張子をもつものがある。これらは複数のフォントを一つのファイルに束ねたフォントファイルであり、したがってこうしたフォントファイルを指定しても機械はどのフォントを参照すればいいかわからない。そのため\setmainjfontなどのオプションにFontIndex=整数値などという形でフォント番号(インデックス)を指定する必要がある。なおインデックスは0始まりである。注意せよ。

例えば、「游ゴシック Bold」はC:\WINDOWS\Fonts\YuGothB.ttc内部に格納されているが、これは「游ゴシック Bold」と「游ゴシック UI Bold」と「游ゴシック UI SemiBold」の三つのフォントをまとめたフォントファイルなので、「游ゴシック Bold」を指定するにはFontIndexを適切に指定してやる必要がある。この場合はFontIndex=0となる。

なお、BoldFontなどに.ttcに格納されているフォントを指定した場合は、BoldFeatures={}内でFontIndexを指定する必要があるItalicBoldItalicなども同様である)。

ただし、どのインデックスにどのフォントが結びついているかを知るのは容易ではない。したがって、FontIndex=0FontIndex=1……というふうにインデックスを変えながらコンパイルを行い、その都度どのフォントが使われているかをPDFファイルから確認すると良いだろう。

Windowsにデフォルトで搭載されている日本語フォントには.ttcのものがかなり多いので、注意すること。

2. luaotfload-toolによるフォント名を指定する

第二に、luaotfload-toolによって認識されるフォント名を指定するというものがある。

まずは以下のコマンドを実行する。

luaotfload-tool --list=*

すると、長いフォントリストが出てくるので、ここから所望のフォント名を頑張って探し、フォント名を抽出する。

例えば、ここからYu Mincho RegularYu Mincho DemiboldYu Gothic RegularYu Gothic Boldが発見できるので、これらの名前を使ってフォントを設定する。

\setmainjfont[BoldFont=Yu Mincho Demibold]{Yu Mincho Regular}
\setsansjfont[BoldFont=Yu Gothic Bold]{Yu Gothic Regular}

この方法が一番楽かもしれない。

3. フォントファミリ名を指定する

第三に、フォントファミリ名を指定するという方法がある。TeXコード自体は一番スマートになる。

問題はフォントのファミリ名をどのようにして知るかである。fontspecパッケージの説明書によれば、otfinfoコマンドを-iオプションを付けて実行し、そこからフォントファミリ名を取得する方法が推奨されている。

なお、otfinfoという名前の通り、これは基本的にOpenTypeフォントにしか使えない。.ttfの拡張子がついているフォントの場合は、この方法が使えないことがある*6

otfinfootfinfo <オプション> <ファイル名>という形式で実行する。

otfinfo -i C:\WINDOWS\Fonts\yumin.ttf

C:\WINDOWS\Fonts\yumin.ttfというのはWindowsにおける「游明朝 Regular」のフォントファイルである。これを実行すると、次のようになる。

Family:              Yu Mincho
Subfamily:           Regular
Full name:           Yu Mincho Regular
PostScript name:     YuMincho-Regular
Preferred family:    Yu Mincho
Preferred subfamily: Regular
Version:             Version 1.92
Unique ID:           YuMincho-Regular
Designer:            JIYUKOBO Ltd.
Designer URL:        http://www.jiyu-kobo.co.jp/
Manufacturer:        JIYUKOBO Ltd.
Vendor URL:          http://www.jiyu-kobo.co.jp/
Trademark:           Yu Type Library is a Trademark of JIYUKOBO Ltd. registered in Japan.
Copyright:           Copyright ツゥ 2019 JIYUKOBO Ltd. All Rights Reserved.
License URL:         http://www.jiyu-kobo.co.jp/
License Description: Microsoft supplied font. You may use this font to create, display, and print content as permitted by the license terms or terms of use, of the Microsoft product, service, or content in which this font was included. You may only (i) embed this font in content as permitted by the embedding restrictions included in this font; and (ii) temporarily download this font to a printer or other output device to help print content. Any other use is prohibited.
Vendor ID:           JY
Permissions:         Editable

このうち、Preferred familyに記されているファミリ名を指定する。つまりここではYu Minchoになる。したがって、例えば明朝体に游明朝を指定したい場合は次のようにする。

\setmainjfont{Yu Mincho}

この方法の便利なところは、BoldFontなどをこまごまと指定しなくても、自動的にBoldFont等を認識してくれることがある点である。例えば上のように指定すれば、太字フォントに「游明朝 Demibold」が自動的に割り当てられる。うまくいかない場合もある。

4. PostScript名で指定する

第四に、フォントのPostScript名で指定する方法がある。フォントのPostScript名とは、(誤解を恐れずにいえば)フォントがPDFに埋め込まれる際のフォントの名前である。

事前にPostScript名がわかっている場合、この方法は便利である*7

例えば、「游明朝 Regular」のPostScript名はYuMincho-Regular、「游明朝 Demibold」のPostScript名はYuMincho-Demiboldである。これを以下のように指定する。

\setmainjfont[BoldFont=YuMincho-Demibold]{YuMincho-Regular}

フォントの設定例

設定例として、游明朝+游ゴシックの設定を行った例を以下に示す。

ファイル名で指定する例。

\setmainjfont[
  BoldFont=yumindb.ttf,
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=yumindb.ttf,FakeSlant=0.2},
]{yumin.ttf}
\setsansjfont[
  BoldFont=YuGothB.ttc,
  BoldFeatures={FontIndex=0},
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=YuGothB.ttc,FontIndex=0,FakeSlant=0.2},
  FontIndex=0,
]{YuGothR.ttc}

luaotfload-toolのフォント名で指定する例。

\setmainjfont[
  BoldFont=Yu Mincho Demibold,
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=Yu Mincho Demibold,FakeSlant=0.2},
]{Yu Mincho Regular}
\setsansjfont[
  BoldFont=Yu Gothic Bold,
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=Yu Gothic Bold,FakeSlant=0.2},
]{Yu Gothic Regular}

フォントファミリ名で指定する例。

\setmainjfont[
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=Yu Mincho Demibold,FakeSlant=0.2},
]{Yu Mincho}
\setsansjfont[
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=Yu Gothic Bold,FakeSlant=0.2},
]{Yu Gothic}

PostScript名で指定する例。

\setmainjfont[
  BoldFont=YuMincho-Demibold,
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=YuMincho-Demibold,FakeSlant=0.2},
]{YuMincho-Regular}
\setsansjfont[
  BoldFont=YuGothic-Bold,
  AutoFakeSlant=0.2,
  BoldItalicFeatures={Font=YuGothic-Bold,FakeSlant=0.2},
]{YuGothic-Regular}

フォント切り替えコマンド

以上のように設定したフォントを実際に文書に反映させるには、次のコマンドを用いる。

用途 \textXX{……}系コマンド {\XXYY ……}系コマンド
明朝体に切り替える(デフォルト) \textmc{} \mcfamily
ゴシック体に切り替える \textgt{} \gtfamily
等幅体に切り替える \texttt{} \ttfamily
通常の太さに切り替える(デフォルト) \textmd{} \mdseries
太字に切り替える \textbf{} \bfseries
直立体に切り替える(デフォルト) \textup{} \upshape
イタリック体に切り替える \textit{} \itshape

文書で使われているフォントを確認する

生成したPDF文書で使われているフォントを確認するためには、ある程度高機能なPDFビューアーを必要とする (Adobe Acrobat、SumatraPDF、PDF X-Changeなど)。

ビューアーによって操作方法は違うが、ファイルの「フォント情報」などを見ればその文書に使われている(埋め込まれている)フォントが確認できる。フォント名はPostScript名で表示される。

Adobe Acrobatでは、PDFファイルに埋め込まれているフォントを確認できる。

おわりに

上の方法を組み合わせれば、基本的な日本語フォントの設定はできるであろうと思われる。最近のTwitterではWindowsに付属しているUD デジタル教科書体がやたら持ち上げられているので、こうした記事も需要があるかもしれないと思い書いてみた。当然ながら、上の方法を用いればUD デジタル教科書体もLuaLaTeXにて使用することができる(なお、UD デジタル教科書体はプロポーショナルバージョンがいくつか付属していることに注意。プロポーショナル字形のフォントを適切に使用するためにはプロポーショナル組を行う必要があるが、これを行う方法を説明すると記事が長くなりすぎる。)。

luatexja-fontspecではこれ以外にもさまざまな機能を使用することができる。そういった応用的な話は(気が向けば)また別で書くかもしれない。

*1:日本語LaTeXにかぎらず、LaTeXのフォント管理機構(New Font Selection System)の一般的な話を知りたければ、「LaTeX2e Font Selection」とかいう40頁くらいのPDFを読むといい。

*2:これらがそれぞれ欧文書体のセリフ体、サンセリフ体、等幅体に対応している。

*3:等幅体とは、そもそも普通の欧文書体がプロポーショナル体(各文字の幅が一定ではない)であることを前提している概念であると思われるが、日本語の場合多くの書体で文字幅は基本的に一定である。また、等幅体の主な役割の一つはソースコードを記述することだが、日本語文字を使ってソースコードを書くことはあまりない。そういった事情からか、日本語の等幅体の多くは明朝体やゴシック体の流用である。

*4:後述するように、ここにフォントファミリ名を指定することもできる。

*5:なおmacOSLinuxの場合でも似たような方法が使えるのではないかと思う(使っていないのでわからないが)。

*6:なお、OpenTypeフォントでもttf拡張子がついていることがあるため、注意

*7:例えば、モリサワが提供しているMorisawa Fontsサブスクリプションサービスの場合、Morisawa Desktop ManagerからPostScript名を取得することが可能である。




以上の内容はhttps://ho-tori.hateblo.jp/entry/2025/04/20/010301より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14