我使用 XeLaTeX、fontspec 和 unicode-math。当我在定理的标题中放入一些数学公式时,它会使用默认的 Latin Modern 字体排版,而不是设置的自定义字体\setmathfont
。
请参阅以下 MWE:
%!TeX program = xelatex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\setsansfont{Linux Biolinum O}
\usepackage{mathtools}
\RequirePackage{unicode-math}
\setmathfont{Libertinus Math}
\RequirePackage[hyperref,amsmath,thmmarks]{ntheorem}
\theorembodyfont{\normalfont}
\theoremheaderfont{\sffamily\scshape\bfseries}
\theoremstyle{break}
\newtheorem{example}{Example}
\newcommand{\Set}{\mathbf{Set}}
\begin{document}
\begin{example}[monomorphisms in $\Set$]
Some text involving $\Set$.
\end{example}
\end{document}
生成结果:
与此相反,我希望在示例标题中出现以下两种行为:
\Set
使用我的数学字体 Libertinus Math 排版,就像示例主体中那样。\Set
使用我的无衬线字体排版,以便它适合定理的标题。
有人知道如何解决这个问题吗?提前谢谢大家!
答案1
我建议您使用\symbf
(包提供的宏unicode-math
)而不是\mathbf
。
对于以下屏幕截图,我们有\setmathfont{Libertinus Math}
。并且,由于没有明确加载文本字体,\mathbf
因此采用默认的粗体拉丁现代字形,不是Libertinus Math 字形。相反,\symbf
使用粗体 Libertinus Math 字形。
%!TeX program = lualatex %% or xelatex
\documentclass{article}
\RequirePackage{unicode-math}
\setmathfont{Libertinus Math}
\begin{document}
$\mathbf{Set}$ $\symbf{Set}$
\end{document}
答案2
大多数情况下,此类问题都是由于 造成的ntheorem
;这只是其中一种情况。使用amsthm
。
%!TeX program = xelatex
\documentclass{article}
\usepackage{mathtools}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage{amsthm}
\setmainfont{Linux Libertine O}
\setsansfont{Linux Biolinum O}
\setmathfont{Libertinus Math}
\newtheoremstyle{sfbreak}
{\topsep} % ABOVESPACE
{\topsep} % BELOWSPACE
{\normalfont} % BODYFONT
{0pt} % INDENT
{\sffamily\scshape\bfseries} % HEADFONT
{.} % HEADPUNCT
{\newline} % AFTER HEAD SPACE
{\thmname{#1}\thmnumber{ #2}\thmnote{ (#3)}} % HEAD SPEC
\theoremstyle{sfbreak}
\newtheorem{example}{Example}
\newcommand{\Set}{\mathbf{Set}}
\begin{document}
\begin{example}[monomorphisms in $\Set$]
Some text involving $\Set$.
\end{example}
$\mathbf{Eff}\neq\symbf{Eff}$
\end{document}
请注意,对于您的使用来说,\mathbf
最好\symbf
如示例所示:您做想要连字符。