我想知道如何beamer
为非 Beamer 文档类复制数学字体设置?有类似的问题已回答但是该解决方案并不像beamer
使用数学字体实际执行的那样好。您可以看到下面两个 MWE 之间的区别:
投影仪 MWE:
\documentclass{beamer}
\usepackage[no-math]{fontspec}
\setsansfont{Arial}
\begin{document}
\begin{frame}
\Huge
a e f 1 2 3 \\ $a e f 1 2 3$
\end{frame}
\end{document}
文章 MWE:
\documentclass{article}
\usepackage{sfmath}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[no-math]{fontspec}
\setsansfont{Arial}
\begin{document}
\Huge\noindent
a e f 1 2 3 \\ $a e f 1 2 3$
\end{document}
那么我可以得到相同的来自两个 MWE 的数学排版?
答案1
beamer 基本上使用普通的文本字体进行数学运算。您可以借用相应的代码,beamerbasefont.sty
或者更简单地使用mathastext
包来获得类似的结果:
% !TeX TS-program = xelatex
\documentclass{article}
%\usepackage{sfmath}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[no-math]{fontspec}
\setsansfont{Arial}
\usepackage[italic]{mathastext}
\begin{document}
\Huge\noindent
a e f 1 2 3 \\ $a e f 1 2 3$
\end{document}
答案2
以下主要不是一个答案,而是一个扩展的评论
正如评论中指出的那样@samcarter 的回答,我编写了一个包,它确实会根据所用内容的高度来移动\mathaccentV
( 的一部分) 的重音符号。这确实改善了大多数情况下重音符号的放置。该补丁与引擎无关,但肯定有更好的方法(例如,当与标准字体和 pdfTeX 一起使用时会怎样)。此外,该补丁可以与不同的字体一起使用,并且可以调整位置。amsmath
beamer
您需要一个未在 CTAN 上发布但托管在此处的包:捷径. 它还需要包磁共振成像. 这两个软件包的文档都可以在此 PDF。这些软件包是MRTbundle
我为撰写学士论文的学院编写的模板的一部分。
以下是比较,也包含在文档中MRTsfacc
(使用的字体是使用选项加载的helvet
;使用pdfTeX 编译的):
mathastext
italic
defaultmathsizes
安装上述两个包后的用法(我没有 Arial,因此我使用 DejaVu Sans;使用 XeTeX 编译):
\documentclass{article}
\usepackage[no-math]{fontspec}
\setsansfont{DejaVu Sans}
\usepackage[]{amsmath} % not necessarily needed, MRTsfacc loads amsmath with \RequirePackage
\renewcommand{\familydefault}{\sfdefault}
\usepackage{MRTsfacc}
% if the used shift isn't just right you can use the following to redefine the
% width
\MRTsfaccSet{.22} % default is .25
\usepackage[italic]{mathastext}
\newcount\foocount
\begin{document}
\Huge\noindent
a e f 1 2 3 \\ $\hat{a} e f 1 2 3$
% a loop creating every upper case letter in a \hat
\foocount65
\loop\ifnum\foocount<91
% using \hat* results in a \hat with the accent moved regardless of the
% argument, this is used as the test to see whether the argument is a letter
% does fail for \char\foocount
$\hat*{\char\foocount}$
\advance\foocount1
\repeat
% a loop creating every lower case letter in a \hat
\foocount97
\loop\ifnum\foocount<123
$\hat*{\char\foocount}$
\advance\foocount1
\repeat
\end{document}
如果内部使用的此类宏的参数\mathaccentV
是字母(因此有 catcode 11),则包只会自动应用移位。您可以在*
宏后使用 来强制移位,或者使用 来禁止此类移位!
,因此\hat*
始终使用移位,\hat!
从不执行。
上述代码的结果: