0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

unicode-math で数式フォントを一時的に切り替えたい

Last updated at Posted at 2024-05-02

見出しの中や特定の環境内等、数式のフォントを一時的に切り替えたい場面がいくつかあるでしょう。

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}

mv-sample.png

この \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}

head-sample.png

見出し内の数式は 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)) は非常に見た目が似ている可能性がありますが等価ではありません。

xcharter-bold.png


数式のボールドフォントを構成する方法は 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 でも使えるようになっていてほしいですが、どうやらそのようにはならないようです。\setmathfontfaceversion = 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-mathfontspec の両リポジトリで問題提起されていないようでした。

多ウェイトな数式フォント

数式フォントは単一ウェイトであることが多いですが、いくつかのフォントには多ウェイトに対応しています。

以下に、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 と同じように {~} の中で利用するようにしましょう。

mathcolor.png

  1. もしも独自で Math version を構成したい場合、\DeclareMathVersion\DeclareMathAlphabet\SetSymbolFont 等を構成する必要があります。これらの詳細は fntguide.pdf を確認してください。あるいは、入手困難な通称「緑の本」に解説があるらしいです。

  2. fontspec から提供される \setmathrm からでも \mathrm のフォントを構成できますが、このコマンドでは version を指定できません。\setmathfontface で構成しましょう。

  3. 見出しコマンドは 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 が適用され、目次の数式はデフォルトのままです。

  4. 実際は bold にどのようなフォントを構成していても良いですが、ボールドフォントを構成している方が正当でしょう。また、ボールドではないフォントであれば bold 以外のバージョン名を与えるべきでしょう。

  5. LuaLaTeX を利用することを前提としていますが、XeLaTeX の場合は color パッケージを利用してください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?