LuaLaTeXとunicode-mathとboldsymbolの組み合わせの話
TL;DR
-
unicode-math
とLuaLaTeXと\boldsymbol
を組み合わせると、PDFで太字にならない - PandocからLuaLaTeXを使ってPDFを生成する時に
\boldsymbol
が効かないのはこれが原因 - LuaLaTeXと
\boldsymbol
の組み合わせなら大丈夫 - 簡単な対応策は、太字だが斜体にならない
\mathbf
を使うこと - どうしても太字かつ斜体にしたければ、プリアンブルに以下を追加。
\setmainfont{XITS}
\setmathfont{XITS Math}
\setmathfont[version=bold,FakeBold=3.5]{XITS Math}
(2023年7月15日追記)
奥村さんからsymbfit
を使うと良い、と教えていただきました。確かにLuaLaTeX+unicode-math
の組み合わせでも\symbfit
なら太字かつ斜体になります。VSCodeのプレビューは対応していませんが、GitHubのプレビューは対応しているようです。
現象
Markdown+Pandoc+LuaLatex
僕はMarkdownでノートを書き、PandocでPDF化しているのだが、数式を含むため、PDF化にLuaLaTeXを使っている。この時、\boldsymbol
が太字にならないことに困っていた。
例えば、
# test
$$
\boldsymbol{r}=r
$$
みたいなMarkdownを書いて、
pandoc test.md -o test.pdf --pdf-engine=lualatex -V documentclass=ltjarticle
で変換すると、
のように、太字にならない。
特にエラーも警告も出ず、ただ出力されるPDFで\boldsymbol
が無視されるらしい。地道な二分探索の結果、以下のようなことがわかった。
LuaLaTeX+boldsymbol
まず、LuaLaTeX+boldsymbolの組み合わせは問題ない。こんなTeXファイルを書いて
\documentclass{ltjarticle}
\usepackage{amsmath}
\begin{document}
$$
\boldsymbol{r} = r
$$
\end{document}
lualatex test
としてPDFを作ると、ちゃんと太字になる。
LuaLaTeX+unicode-math+boldsymbol
しかし、unicode-math
パッケージを使うと、太字にならない。
\documentclass{ltjarticle}
\usepackage{amsmath}
\usepackage{unicode-math} %% ←これを追加
\begin{document}
$$
\boldsymbol{r} = r
$$
\end{document}
lualatex test
対応策
Pandocから数式を含むMarkdownをLuaLaTeXでPDF化した時、\boldsymbol
が使えなかったのはLuaLaTeXとunicode-math
の組み合わせの問題。Pandocからunicode-math
を出力しないようにする方法も探したのだが、そもそも\boldsymbol
が非推奨っぽい。とりあえず対応策を2つ見つけた。
mathbfを使う
よくわかっていないが、ベクトルを表す時に「太字かつ斜体」を使うのは日本独自っぽい(?)らしく、単に太字にしたければ\mathbf
を使えば良いそうだ。
# test
$$
\mathbf{r}=r
$$
pandoc test.md -o test.pdf --pdf-engine=lualatex -V documentclass=ltjarticle
以下のような出力となる。
Poorman's boldsymbolを使う
ここにあった解決策。プリアンブルに以下を記述する。
\setmainfont{XITS}
\setmathfont{XITS Math}
\setmathfont[version=bold,FakeBold=3.5]{XITS Math}
例えば、全体のTeXファイルはこうなる。
\documentclass{ltjarticle}
\usepackage{amsmath}
\usepackage{unicode-math} %% ←これがあると太字にならない
%% ↓以下を追加
\setmainfont{XITS}
\setmathfont{XITS Math}
\setmathfont[version=bold,FakeBold=3.5]{XITS Math}
\begin{document}
$$
\boldsymbol{r} = r
$$
\end{document}
出力はこんな感じ。
やや癖のあるフォントだが、一応できる。
Poorman's boldsymbolをPandocから利用する
上記の解決策をPandocから利用するには、TeXのテンプレートを使う。
\setmainfont{XITS}
\setmathfont{XITS Math}
\setmathfont[version=bold,FakeBold=3.5]{XITS Math}
という内容のtemplate.tex
を用意しておき、
# test
$$
\boldsymbol{r}=r
$$
という内容のtest.md
があるディレクトリで、
pandoc test.md -o test.pdf --pdf-engine=lualatex -V documentclass=ltjarticle -H ./template.tex
としてPDFに変換すると、以下のような出力となる。
(2023年7月15日追記)symbfitを利用する
\symbfit
を利用すれば、LuaLaTeXとunicode-math
の組み合わせでも太字かつ斜体になる。
# test
$$
\symbfit{r}=r
$$
pandoc test.md -o test.pdf --pdf-engine=lualatex -V documentclass=ltjarticle
出力はこんな感じ。
まとめ
LaTeXでベクトルを表す時、太字+斜体にすると問題が多いので、単なる太字の\mathbf
を使うか、素直に\vec
を使うのが良さそう。
タイトルに「LuaLaTeXの……」と書いたが、他のLaTeXエンジンではどうなるのかまでは調べていない。
Discussion