見出しの中や特定の環境内等、数式のフォントを一時的に切り替えたい場面がいくつかあるでしょう。
LaTeX では、“Math version” と呼ばれる数式フォントを制御するシステムがあり、これを利用することで一時的に数式のフォントを替えることができます。
本記事では、unicode-math からこの Math version を構成し、途中で数式フォントを切り替える方法を紹介します。
デフォルト LaTeX の Math version
unicode-math を使わないデフォルト LaTeX では、次の 2 つの Math version があります。これを \mathversion
によって指定します。
Math version | フォント |
---|---|
normal |
デフォルトフォント |
bold |
ボールドフォント |
これ以外にも、特定のフォント関連のパッケージでは、これ以外の Math version が提供されている場合があるらしいです。1
Math version の具体的な使用例として、次のようなファイルを作成することが出来ます。
\mathversion{bold}
以下ではボールドとなり、\mathversion{normal}
とすれば元のフォントに戻ります。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\begin{document}
「Eulerの公式」とは,複素指数関数と三角関数の間に成り立つ恒等式です.
\mathversion{bold}
\begin{equation}
e^{ix} = \cos x + i\sin x
\end{equation}
\mathversion{normal}
特に,{\mathversion{bold}\( x = \pi \)}のとき\( \cos\pi = -1 \),\( \sin\pi = 0 \)を採り,これは「Eulerの等式」と呼ばれます.
{
\mathversion{bold}
\begin{equation}
e^{i\pi} = -1
\end{equation}
}
\end{document}
この \mathversion
は、\sffamily
・\gtfamily
や \color
のようなスタイルコマンドと同じように、{
~}
や \begin{...}
~\end{...}
の中にスコープされます。ただし、\mathversion
は数式環境内に置きません。必ず数式環境外に置きます。
また、\mathversion{bold}
に等価な \boldmath
や \mathversion{normal}
に等価な \unboldmath
があります。(参考)
ちなみに、amsmath パッケージから提供される \boldsymbol
は、\mathversion{bold}
を使用しています。
\boldsymbol
の内部では \hbox
を利用して数式環境から一旦出てから \mathversion{bold}
を利用するように定義されています。(そのため、添え字が上手く付けられない等の問題が生じます)
このような機能が unicode-math でも利用できます。加えて、任意の version
名を与えるのも簡単です。
unicode-math で Math version を構成する
ドキュメントの途中で数式フォントを切り替える場合、unicode-math では \setmathfont
を置くたびにフォントが切り替えられますが、一時的に切り替えたい場合には完全に数式フォントを読み込むため非効率になります。
これを効率的にフォントを切り替える方法として、LaTeX がデフォルトで提供している \mathversion
を利用します。
フォントに version
を指定する
unicode-math が提供する \setmathfont
には version
オプションを構成できます。
この version
は \setmathfont
や \setmathfontface
2 のオプションで version = <version name>
の形で構成し、本文内で \mathversion{<version name>}
として利用できます。
バージョン 0.8r 現在、version
オプションと range
オプションは共存できません。
例えば、メインの数式フォントは NewComputerModernMath で、特定の Math version の時だけ Fira Math にしたい場合は、プリアンブルで次のように構成します。
\setmainfont{NewComputerModern10}
\setmathfont{NewComputerModernMath}
\setmathfont[version = fira]{Fira Math}
\setmathfontface\mathrm{Fira Sans}[version = fira]
これによって、Math version “fira
” が構成出来ました。あとは好きなところで \mathversion{fira}
とすれば Fira Math のフォントが適用されます。
ちなみに、\setmathfontface
に関して \mathrm
以外の \mathbf
等を使用したい場合も、同じように version
を指定して構成しましょう。
\setmathfontface\mathbf{Fira Sans Bold}[version = fira]
使用例
jlreq 文書クラスの見出しは欧文がサンセリフ体、和文がゴシック体になっているため、数式もサンセリフなフォント (Fira Math) にしてみましょう。
以下のように、見出しの \section
内で \mathversion{fira}
とすれば、本文の数式は NewComputerModernMath、見出しの数式は Fira Math が適用されます。3
\documentclass{jlreq}
\usepackage{unicode-math}
\setmainfont{NewComputerModern10}
\setmathfont{NewComputerModernMath}
\setmathfont[version = fira]{Fira Math}
\setmathfontface\mathrm{Fira Sans}[version = fira]
\begin{document}
\section{
\mathversion{fira}
Eulerの公式:
\( e^{ix} = \cos x + i\sin x \)
}
「Eulerの公式」とは,複素指数関数と三角関数の間に成り立つ恒等式です.
特に,\( x = \uppi \)のとき\( \cos\uppi = -1 \),\( \sin\uppi = 0 \)を採るので\( e^{i\uppi} = -1 \)となります.
これは「Eulerの等式」と呼ばれます.
\end{document}
見出し内の数式は Fira Math になっているのに対して、本文内の数式は NewComputerModernMath になっています。
unicode-math における \mathversion{bold}
unicode-math を利用する際にベクトル等の数学的意味で太字のアルファベットを利用する場合は、\symbf
を使いましょう。
ボールドの数式フォントを構成することで \boldsymbol
が使えるようになりますが、ベクトル等の数学的意味付けとは異なるため注意が必要です。
unicode-math における \mathversion{bold}
は、ボールドフォントに切り替えて強調する意味のみを持ちます。
すなわち、レギュラーフォントにおける x
とボールドフォントにおける x
は、数学的に同じ意味を持ちます。単に強調しているかどうかのみが異なります。
逆に言えば、\mathversion{bold}
下の x
(ボールドフォントの 𝑥 (U+1D465))と \mathversion{normal}
下の \symbfit{x}
(𝒙 (U+1D499)) は非常に見た目が似ている可能性がありますが等価ではありません。
数式のボールドフォントを構成する方法は 2 つあります。どちらも同じ効果を得ます。また、ここでも \sin
等の名前演算子のフォントに対しても構成する必要があります。4
-
BoldFont
で構成する\setmathfont[ BoldFont = kpmath-bold.otf ]{kpmath-regular.otf} \setmathfontface\mathrm{kproman-bold.otf}[version = bold]
-
version = bold
で構成する\setmathfont{kpmath-regular.otf} \setmathfont[version = bold]{kpmath-bold.otf} \setmathfontface\mathrm{kproman-bold.otf}[version = bold]
ちなみに、\setmainfont
側の BoldFont
のフォントが version = bold
でも使えるようになっていてほしいですが、どうやらそのようにはならないようです。\setmathfontface
を version = bold
オプション付きで構成しましょう。
上手くいかないコード例(折りたたみ)
\documentclass{article}
\usepackage{unicode-math}
\setmainfont[
%% これでは `\mathversion{bold}` に kproman-bold.otf が適用されない
BoldFont = kproman-bold.otf
]{kproman-regular.otf}
\setmathfont[
BoldFont = kpmath-bold.otf
]{kpmath-regular.otf}
\begin{document}
\mathversion{normal}
\( e^{ix} = \cos x + i\sin x \)
\mathversion{bold}
\( e^{ix} = \cos x + i\sin x \)
%% 名前演算子のフォントがデフォルトの Computer Modrn (CMBX10) になる
\end{document}
特段、この問題は unicode-math と fontspec の両リポジトリで問題提起されていないようでした。
多ウェイトな数式フォント
数式フォントは単一ウェイトであることが多いですが、いくつかのフォントには多ウェイトに対応しています。
以下に、TeX Live に収録されている多ウェイトな数式フォントを紹介します。
フォント名 | ファイル名 |
---|---|
Erewhon Math |
erewhon-math.otf , erewhon-bold.otf
|
XCharter Math |
xcharter-math.otf , xcharter-math-bold.otf
|
KpMath (roman) |
kpmath-regular.otf , kpmath-light.otf , kpmath-semibold.otf , kpmath-bold.otf
|
KpMath (sans serif) |
kpmath-sans.otf , kpmath-sansbold.otf
|
XITS Math |
xitsmath.otf , xitsmath-bold.otf
|
Concrete Math |
concrete-math.otf , concrete-math-bold.otf
|
Lete Sans Math |
letesansmath.otf , letesansmath-bold.otf
|
多くの場合、light < regular < medium < bold
の順でウェイトが大きく(太く)なります。(参考)
余談
unicode-math は Unicode な意味で数学記号を意味付けします。そのため、“\mathversion{bold}
によるボールドフォント” と “\symbf
系によるボールドな数学記号” との混同には気を付けてください。
これらを混同すると、unicode-math を使っている意味が半減するようなものです。
数式を色づける
強調のために数式に色付けしたい場合は、luacolor パッケージの \mathcolor
を使います。5
具体例として、先で示した例を使って \uppi
だけ赤色にしてみました。
コード(折りたたみ)
\documentclass{jlreq}
\usepackage{luacolor}
\usepackage{unicode-math}
\setmainfont{erewhon-regular.otf}
\setmathfont{erewhon-math.otf}
\setmathfont[version = bold]{erewhon-math-bold.otf}
\setmathfontface\mathrm{erewhon-bold.otf}[version = bold]
\begin{document}
「Eulerの公式」とは,複素指数関数と三角関数の間に成り立つ恒等式です.
\mathversion{bold}
\begin{equation}
e^{ix} = \cos x + i\sin x
\end{equation}
\mathversion{normal}
特に,{\mathversion{bold}\( x = {\mathcolor{red}{\uppi}} \)}のとき\( \cos{\mathcolor{red}{\uppi}} = -1 \),\( \sin{\mathcolor{red}{\uppi}} = 0 \)を採り,これは「Eulerの等式」と呼ばれます.
{
\mathversion{bold}
\begin{equation}
e^{i{\mathcolor{red}{\uppi}}} = -1
\end{equation}
}
\end{document}
luacolor で \mathcolor
を利用すると色がもれてしまいます。\color
と同じように {
~}
の中で利用するようにしましょう。
-
もしも独自で Math version を構成したい場合、
\DeclareMathVersion
や\DeclareMathAlphabet
・\SetSymbolFont
等を構成する必要があります。これらの詳細は fntguide.pdf を確認してください。あるいは、入手困難な通称「緑の本」に解説があるらしいです。 ↩ -
fontspec から提供される
\setmathrm
からでも\mathrm
のフォントを構成できますが、このコマンドではversion
を指定できません。\setmathfontface
で構成しましょう。 ↩ -
見出しコマンドは jlreq から提供された方法でちゃんと定義するべきですが、今回は簡易的に
\section
内で\mathversion
を利用しています。このような方法で\mathversioin
を指定すると、目次側のフォントにまで影響が出ます。正式には、
\ModifyHeading
を使って以下のように構成します。\ModifyHeading{section}{ font = \Large\sffamily\gtfamily\bfseries\mathversion{fira} %% デフォルトの構成に \mathversion を加えただけの形になっているはず %% https://github.com/abenori/jlreq/blob/9dabcae21986ee2a4a5d2e1b08c0797f6d00d432/jlreq.cls#L6378 }
このようにすると、見出しの数式には Math version の
fira
が適用され、目次の数式はデフォルトのままです。 ↩ -
実際は
bold
にどのようなフォントを構成していても良いですが、ボールドフォントを構成している方が正当でしょう。また、ボールドではないフォントであればbold
以外のバージョン名を与えるべきでしょう。 ↩ -
LuaLaTeX を利用することを前提としていますが、XeLaTeX の場合は color パッケージを利用してください。 ↩