我正在使用 Beamer 模板,该模板使用粗体字体作为框架标题。在某些幻灯片上,标题中还有数学表达式。我还想将数学表达式打印为粗体。我正在使用unicode-math
并使用 进行编译lualatex
。在同样使用 进行编译的 LaTeX 文本文档中lualatex
,我在章节标题方面遇到了类似的问题。在那里,我能够使用代码片段修复它
\makeatletter
\g@addto@macro\bfseries{\boldmath}
\makeatother
来自互联网。这对于我的 Beamer 演示文稿使用不同字体的情况没有帮助。因此,我尝试
\makeatletter
\g@addto@macro\bfseries{\symbfit}
\makeatother
但是,在我的 Beamer 演示文稿中,使用此版本的代码片段会导致错误消息! LaTeX Error: \symbfitallowed only in math mode.
因此,将此代码片段添加到我的演示文稿源中似乎会导致 Beamer 尝试将此数学字体用于标题的所有部分,从而导致错误。我该如何解决这个问题?
完整的 MWE 是
\documentclass{beamer}
\usetheme{Verona}
\usepackage{amsmath}
\usepackage[mathbf=sym]{unicode-math}
\setmathfont{Fira Math}
\setmathfont[range=up]{Roboto}
\setmathfont[range=\int]{Fira Math}
\setmathfont[range=cal]{Stix Two Math}
\setmathfont[range={\lessapprox}]{Stix Two Math}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% the "problematic" code
\makeatletter
\g@addto@macro\bfseries{\symbfit}
\makeatother
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{frame}
\frametitle{Test \(f_1(x)\)}
test slide
\[f_1(x)\]
\[\symbfit{f_1(x)}\]
\end{frame}
\end{document}
这很好地说明,原则上,大胆的数学是有效的。
请注意,我不想在每个方法中添加代码来\frametitle
手动使其工作。我想要一个通用的解决方案。
我正在使用 TexLive 2019,因为它可从 Ubuntu 20.04 的软件包源中获得。
23年7月5日编辑:我更正了关于在 LaTeX 文本文档中使用代码片段的说法。我使用了 for thatboldmath
而不是symbfit
,这在问题的第一个版本中是错误的。感谢用户 @samcarter_is_at_topanswers.xyz 质疑我的陈述,这导致了这次修正!
答案1
根据字体中包含的版本,\boldmath
可以向框架标题字体添加一个简单的版本:
% !TeX TS-program = lualatex
\documentclass{beamer}
\usetheme{Verona}
\usepackage{amsmath}
\usepackage[mathbf=sym]{unicode-math}
\setmathfont{XITS Math}
\setbeamerfont{frametitle}{series=\bfseries\boldmath}
\begin{document}
\begin{frame}
\frametitle{Test \(f_1(x)\)}
test slide
\[f_1(x)\]
\[\symbfit{ f_1(x)}\]
\end{frame}
\end{document}
如果你的字体不支持此功能,你可以伪造它:
% !TeX TS-program = lualatex
\documentclass{beamer}
\usetheme{Verona}
\usepackage{amsmath}
\usepackage[mathbf=sym]{unicode-math}
\setmathfont{Fira Math}
\setmathfont[version=bold,FakeBold=3]{Fira Math}
\setmathfont[range=up]{Roboto}
\setmathfont[range=\int]{Fira Math}
\setmathfont[range=cal]{Stix Two Math}
\setmathfont[range={\lessapprox}]{Stix Two Math}
\setbeamerfont{frametitle}{series=\bfseries\boldmath}
\begin{document}
\begin{frame}
\frametitle{Test \(f_1(x)\)}
test slide
\[f_1(x)\]
\[\symbfit{ f_1(x)}\]
\end{frame}
\end{document}