数式用フォントで遊ぶ

no extension

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

  • 数式用フォントで遊ぼう

である。

既定状態での数式表示

$\mathrm{\TeX}$ および $\mathrm{\LaTeX}$ は元々が数式表現に優れている。 これは $\mathrm{Lua\TeX}$, $\mathrm{Lua\LaTeX}$ でも同じで,たとえばプリアンブルに特に何も書かなくても(『LaTeX2ε美文書作成入門』より引用)

\documentclass[fleqn]{ltjsarticle}

\begin{document}

``?`!`But aren't Kafka's \emph{Schlo{\ss}} and {\AE}sop's {\OE}uvres
often na\"{\i}ve vis-\`a-vis the d{\ae}monic ph{\oe}nix's
official r\^ole in fluffy souffl\'es!?''

\[
  \left( \int_0^\infty \frac{\sin x}{\sqrt x} dx \right)^2 =
  \sum_{k=0}^\infty \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
  \prod_{k=1}^\infty \frac{4k^2}{4k^2-1} =
  \frac{\pi}{2}
\]

\end{document}

以下のような感じで適切に組んでくれる。

equation (1)
equation (1)

もう少し変わった式やシンボルを使う場合には amsmath および amssymb パッケージを使って(同じく『LaTeX2ε美文書作成入門』より引用)

\documentclass[fleqn]{ltjsarticle}

\usepackage{amsmath,amssymb} % amsmath packages

\begin{document}

\subsection*{連分数(amsmathパッケージ)}

\begin{equation}
    b_0 + \cfrac{c_1}{b_1 +
          \cfrac{c_2}{b_2 +
          \cfrac{c_3}{b_3 +
          \cfrac{c_4}{b_4 + \cdots}}}}
\end{equation}

\subsection*{黒板文字(amssybパッケージ)}

$\mathbb{ABCDEFGHIJELMN}$

\end{document}

このように記述すれば,タイプセットの結果は

equation (2)
equation (2)

こんな感じになる。 ちなみに本文の欧文書体は Latin Modern,数式は Computer Modern で,amssymb パッケージで提供される黒板太文字は AMSFonts と呼ばれるものだ1

本文の欧文書体を OpenType フォントに変更する

$\mathrm{Lua\LaTeX}$ で本文の書体を OpenType フォントに変更するのはとても簡単になった。 本文の和文フォントを変更する方法は前々回に紹介したが,たとえば欧文書体として $\mathrm{\TeX}$ Gyre をセットする場合は

\documentclass[fleqn]{ltjsarticle}
\usepackage[no-math,sourcehan]{luatexja-preset} % Japanese fonts

% Import fonts
\setmainfont[Scale=MatchLowercase]{TeXGyreTermes}
\setsansfont[Scale=MatchLowercase]{TeXGyreHeros}
\setmonofont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{Inconsolatazi4}

\begin{document}

...

\end{document}

のように指定する。 欧文フォントの指定には fontspec パッケージが必要だが,和文フォント設定用の luatexja-preset パッケージに含まれているため,改めて fontspec パッケージを明示する必要はない。

ちなみにタイプライタ文字には Inconsolata を指定している2

書体を選択する場合は本文の書体と後述する数式用の書体があまりかけ離れないようバランスをとることが重要である。 『LaTeX2ε美文書作成入門』には欧文書体についてかなりページを割いて解説されているので,一読することをお薦めする。

数式用の書体を変更する

既存のパッケージを使う(Concrete + Euler の場合)

たとえば,数学好きに人気の高い Concrete + Euler フォントの組み合わだが,これは既存のパッケージを使ったほうがよさそうである(後述)。 フォントの指定も従来通り。

\documentclass[fleqn]{ltjsarticle}

% Import fonts
%\usepackage{ccfonts,eulervm}

\begin{document}

\[
  \left( \int_0^\infty \frac{\sin x}{\sqrt x} dx \right)^2 =
  \sum_{k=0}^\infty \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
  \prod_{k=1}^\infty \frac{4k^2}{4k^2-1} =
  \frac{\pi}{2}
\]

\end{document}

結果は以下の通り。

equation (Concrete + Euler)
equation (Concrete + Euler)

OpenType フォントを使う(unicode-math パッケージ)

数式用の書体に OpenType フォントを指定する場合は unicode-math パッケージを使うのが便利だ。 たとえば $\mathrm{\TeX}$ Gyre Pagella Math を使う場合は以下のように指定する3

\documentclass[fleqn]{ltjsarticle}
\usepackage{unicode-math} % using unicode/OpenType maths fonts

% Import fonts
\setmathfont{TeXGyrePagella-Math}

\begin{document}

\[
  \left( \int_0^\infty \frac{\sin x}{\sqrt x} dx \right)^2 =
  \sum_{k=0}^\infty \frac{(2k)!}{2^{2k}(k!)^2} \frac{1}{2k+1} =
  \prod_{k=1}^\infty \frac{4k^2}{4k^2-1} =
  \frac{\pi}{2}
\]

\end{document}

結果は以下の通り。

equation (TeXGyrePagella-Math)
equation (TeXGyrePagella-Math)

他の書体も紹介しよう。 Asana Math を利用する場合は,以下のように指定する。

\setmathfont{Asana-Math}

結果は以下の通り。

equation (Asana-Math)
equation (Asana-Math)

Neo Euler を利用する場合は,フォントを取得して以下のように指定する。

\setmathfont{Neo Euler}[math-style=upright]

math-style オプションについては後述する。 結果は以下の通り。

equation (Neo Euler)
equation (Neo Euler)

STIX については TeX Live 2017 に収録されているものはデザインがイマイチな気がする。 なのでバージョン2を取得して以下のように指定する。

\setmathfont{STIX Two Math}

結果は以下の通り。

equation (STIX2 Math)
equation (STIX2 Math)

STIX の fork とも言える(?) XITS を利用する場合は,以下のように指定する。

\setmathfont{XITS-Math}

結果は以下の通り。

equation (XITS Math)
equation (XITS Math)

unicode-math パッケージのオプション

unicode-math パッケージのオプションはいくつかあるが,今回はよく使うと思われるものについて紹介する。

math-style, bold-style, sans-style 各オプションは数式の文字や記号のスタイルを指定する。 具体的には ラテン小文字,ラテン大文字,ギリシア小文字,ギリシア大文字 それぞれに対して「立体(upright)」または「斜体(slant)」の組み合わせを指定する。

数式全体(math-style)のスタイル設定は以下の通り。

math-style L小文字 L大文字 G小文字 G大文字
ISO 斜体 斜体 斜体 斜体
TeX 斜体 斜体 斜体 立体
french 斜体 立体 立体 立体
upright 立体 立体 立体 立体

\symbf 指定時(bold-style)のスタイル設定は以下の通り。

bold-style L小文字 L大文字 G小文字 G大文字
ISO 斜体 斜体 斜体 斜体
TeX 立体 立体 斜体 立体
upright 立体 立体 立体 立体

\symsf 指定時(sans-style)のスタイル設定は以下の通り。

sans-style L小文字 L大文字 G小文字 G大文字
italic 斜体 斜体 斜体 斜体
upright 立体 立体 立体 立体

オプションの指定方法は以下の通り。

\usepackage[math-style=ISO,bold-style=ISO]{unicode-math}

または

\usepackage{unicode-math}
\unimathsetup{%
    math-style=ISO,%
    bold-style=ISO%
}

フォント指定時にオプションを指定することもできる。

\setmathfont{Neo Euler}[math-style=upright]

Neo Euler 書体について

Neo Euler のギリシア文字には斜体がないようで, math-style の値を ISO または TeX に設定するとギリシア文字が表示されない。

equation (Neo Euler 2)
equation (Neo Euler 2)

他にも AMSFonts にあるシンボル(先程の黒板太文字とか)が存在しなかったりするようだ。 Euler フォントに関しては,使うのであれば, OpenType ではなく既存のパッケージを使うほうが簡単だろう。

【付録1】 euler.otf ファイルのインストール

euler.otf ファイルは TeX Live 2017 には収録されていないため手動でインストールする必要がある。

といっても簡単で,まず {$TEXMFLOCAL}/fonts/opentype/public/ フォルダを作成し,そこに euler-otf リポジトリを git clone すればOK。 ちなみに $TEXMFLOCAL の場所は kpsewhich コマンドで調べられる。 いつもの場所だね。

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

コピーできたら mktexlsr コマンドを実行して ls-R を更新し,さらに luaotfload-tool も実行すること。

$ 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.

$ luaotfload-tool --update

ちゃんとインストールできたか確認も忘れずに。

$ luaotfload-tool --fuzzy --find="neo euler"
luaotfload | resolve : Font "neo euler" found!
luaotfload | resolve : Resolved file name "c:/texlive/texmf-local/fonts/opentype/public/euler-otf/euler.otf"

【付録2】 STIX2 のインストール

STIX バージョン2(zip ファイル)をダウンロード4 し, Fonts/OTF/ フォルダにある以下のファイルを {$TEXMFLOCAL}/fonts/opentype/public/STIX2/ フォルダにコピーする。

  • STIX2Math.otf
  • STIX2Text-Bold.otf
  • STIX2Text-BoldItalic.otf
  • STIX2Text-Italic.otf
  • STIX2Text-Regular.otf

コピーできたら mktexlsr コマンドを実行して ls-R を更新し,さらに luaotfload-tool も実行すること。

$ 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.

$ luaotfload-tool --update

ちゃんとインストールできたか確認も忘れずに。

$ luaotfload-tool --fuzzy --find="stix two math"
luaotfload | resolve : Font "stix two math" found!
luaotfload | resolve : Resolved file name "c:/texlive/texmf-local/fonts/opentype/public/stix2/stix2math.otf"

ブックマーク

参考図書

photo
[改訂第7版]LaTeX2ε美文書作成入門
奥村 晴彦 黒木 裕介
技術評論社 2017-01-24
評価

LaTeX2e辞典~用法・用例逆引きリファレンス (DESKTOP REFERENCE) 公共政策入門 ミクロ経済学的アプローチ Rで楽しむ統計 (Wonderful R 1) 岩波データサイエンス Vol.5 数学ガールの秘密ノート/積分を見つめて (数学ガールの秘密ノートシリーズ) 岩波データサイエンス Vol.6 独習 LaTeX2ε 具体例から学ぶ 多様体 【改訂第3版】基礎からわかる情報リテラシー はじめて学ぶリー群 ―線型代数から始めよう

ついに第7版が登場。紙の本で買って常に側に置いておくのが吉。

reviewed by Spiegel on 2017-09-27 (powered by G-Tools)


  1. amsmath および amssymb パッケージは AMS (AmericanMathenatical Society; 米国数学会) が数学論文記述用に開発した $\mathrm{\TeX}$ 用のパッケージ及び文字・記号がベースになっていて,このうちの文字・記号のコレクションが AMSFonts と呼ばれている。 AMSFonts は amssymb パッケージを指定することで使用できる。また $\mathrm{\TeX}$ 用の OpenType フォントには AMSFonts を収録したものもある。 [return]
  2. 前回の「LuaLaTeX でコードを書いてみる」を参照のこと。 [return]
  3. amsmath パッケージを併用する場合は unicode-math パッケージの前にamsmath パッケージを指定しないとタイプセット時にエラーになる。なお amssymb パッケージは必要ない。 [return]
  4. ダウンロード・ページは広告だらけで且つ色々と悪名高い SourceForge なのでご注意を。 [return]