软件包 fontspec 和 unicode-math 更改 beamer 中的 mathsf 默认值

软件包 fontspec 和 unicode-math 更改 beamer 中的 mathsf 默认值

编辑:事实证明,我的实际文件问题是由另一个包引起的。

(这个问题和我之前的一个问题密切相关dcolumn 包显示不同的字体因为这仍然没有解决我原来的问题(见评论)。)

我正在使用该类beamer。因此,无衬线字体是本文档中的默认字体。

我有/想要使用 OTF 字体,所以我的文件依赖于包fontspec

有一个表格,它包含D来自dcolumn包的 -colunm 以及常规rl列。我很惊讶地发现,该D列不使用无衬线字体!

我可以将这个问题归结为包fontspec

以下是产生正确输出的 MWE:

\documentclass{beamer}
\usepackage{dcolumn}
\newcolumntype{E}{D{,}{,}{-3}}
\begin{document}
\begin{frame}
  \frametitle{Correct Math Font}
  \begin{center}
    With PDF\LaTeX{} or Lua\LaTeX{} \\
    but without package \texttt{fontspec}\\
    \begin{tabular}{rE}
      1,23 & 1,23
    \end{tabular}
  \end{center}
\end{frame}
\end{document}

正如预期的那样,这是输出。

正确输出

现在,只需将该行添加\usepackage{fontspec}到 MWE 中,它就会变得很奇怪。

编辑:Ulrike Fischer 确实回答了这个问题,并解决了上面 MWE 中的问题。但在我的实际文件上使用该解决方案,却没有奏效。事实证明,另一个包需要该包,这又带来了同样的问题。我也unicode-math通过插入编辑了下面的 MWE 。\usepackage{unicode-math}

\documentclass{beamer}
\usepackage{dcolumn}
\usepackage{fontspec}
\usepackage{unicode-math}
\newcolumntype{E}{D{,}{,}{-3}}
\begin{document}
\begin{frame}
  \frametitle{Incorrect Math Font}
  \begin{center}
    With Lua\LaTeX{} and \\
    with package \texttt{fontspec}\\
    \begin{tabular}{rE}
      1,23 & 1,23
    \end{tabular}
  \end{center}
\end{frame}
\end{document}

这次,你会得到这个输出:

第二列中的 rm 字体输出不正确

您可以清楚地看到,右列采用的是正常的直立罗马字体。为什么会这样?更重要的是,如何修复这个问题?

编辑:Ulrike Fischers 的回答确实解决了我的第一个问题,在我不得不编辑它之前。所以,从技术上讲,她的回答也值得绿色勾号(至少部分如此)。在升级了我关于软件包的问题后unicode-math,Davislor 的回答完全解决了我的问题!

答案1

在评论中,您跟进并说您需要一个适用于的版本unicode-math。由于您的列包似乎切换到数学模式,因此实现此操作的一种方法是自己打开professionalfonts并加载数学字母的无衬线字体。

\documentclass[professionalfonts]{beamer}
\usepackage{unicode-math}
\usepackage{dcolumn}
\newcolumntype{E}{D{,}{,}{-3}}

\setmainfont{NewComputerModernBook}
\setsansfont{NewComputerModernSansBook}
\setmonofont{NewComputerModernMonoBook}
\setmathfont{NewCMMath-Book.otf}
\setmathfont{NewCMSans10-Book}[range={up,"2C}]
\setmathfont{NewCMSans10-BookOblique}[range=it]
\setmathfont{NewCMSans10-Bold}[range=bfup]
\setmathfont{NewCMSans10-BoldOblique}[range=bfit]
\setmathrm{NewComputerModernSansBook}

\begin{document}
\begin{frame}
  \frametitle{Incorrect Math Font}
  \begin{center}
    With Lua\LaTeX{} and \\
    with package \texttt{fontspec}\\
    \begin{tabular}{rE}
      1,23 & 1,23
    \end{tabular}
  \end{center}
\end{frame}
\end{document}

新 Computer Modern Sans 示例

range={up}选项处理字母和数字。您还需要设置所需的任何标点符号,例如,在本例中为逗号 (U+2C)。

一个更简单的替代方案是加载无衬线数学字体,例如\setmathfont{KpMath-Sans.otf}。这样您就可以跳过覆盖其数学字母的过程。您仍然需要\setmathrm\setmainfont无衬线字体。

答案2

如果你不想让 fontspec 影响数学设置,你可以使用no-math选项

\documentclass{beamer}
\usepackage{dcolumn}
\usepackage[no-math]{fontspec}
\newcolumntype{E}{D{,}{,}{-3}}
\begin{document}
\begin{frame}
  \frametitle{Correct Math Font}
  \begin{center}
    With Lua\LaTeX{} and \\
    with package \texttt{fontspec}\\
    \begin{tabular}{rE}
      1,23 & 1,23
    \end{tabular}
  \end{center}
\end{frame}
\end{document}

相关内容