以下主要不是一个答案,而是一个扩展的评论

以下主要不是一个答案,而是一个扩展的评论

我想知道如何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 一起使用时会怎样)。此外,该补丁可以与不同的字体一起使用,并且可以调整位置。amsmathbeamer

您需要一个未在 CTAN 上发布但托管在此处的包:捷径. 它还需要包磁共振成像. 这两个软件包的文档都可以在此 PDF。这些软件包是MRTbundle我为撰写学士论文的学院编写的模板的一部分。

以下是比较,也包含在文档中MRTsfacc(使用的字体是使用选项加载的helvet;使用pdfTeX 编译的): mathastextitalicdefaultmathsizes在此处输入图片描述

安装上述两个包后的用法(我没有 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!从不执行。

上述代码的结果:

在此处输入图片描述

相关内容