在显示模式下,数学为直立,但在投影机类中,对齐环境中为斜体

在显示模式下,数学为直立,但在投影机类中,对齐环境中为斜体

mathastext这样用

\renewcommand{\familydefault}{\sfdefault}
\usepackage[defaultmathsizes]{mathastext}
\renewcommand{\familydefault}{\rmdefault}

这使得我在文章类文档中的整个文档中都以直立的方式显示数学运算,但是在投影机类文档中,我最终在显示数学模式下以直立的方式显示数学运算\[ ... \],但在对齐环境中\begin{align} ... \end{align},数学运算是斜体。

我怎样才能在一致的环境中获得直立的数学?


\documentclass[professionalfonts]{beamer}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[defaultmathsizes]{mathastext}
\renewcommand{\familydefault}{\rmdefault}

\begin{document}
\begin{frame}

Math in display
\[
abc
\]

Text...

Math in align
\begin{align}
abc
\end{align}

\end{frame}
\end{document}

答案1

这是我的第一个答案的重写。有两种选择:

  1. 使用professionalfontbeamer 类选项,与mathastext代码中完全相同,但请注意拼写时没有 final s。或者,按照日志文件中的警告建议,在序言中发出 Rather \usefonttheme{professionalfonts}(最后以 s 结尾!)。

  2. 不要使用professionalfont类选项\usefonttheme{professionalfonts},也不要加载包mathastext,并利用类本身已经将字母和数字重新分配给文档(无文本字体)的事实beamer。也许在 beamer 的某个地方有一个选项可以告诉它让字母直立。但是,我不知道这一点,所以我提供了一个具有预期效果的 hack。

=两个选项之间的区别在于对诸如、?和 等字符的处理;。在选项 1 中,它们将来自 Biolinum(这是由mathastext包完成的),在选项 2 中,它们将来自默认数学(通常是 Computer Modern)字体。

选项 1 (professionalfont+mathastext)

投影机直立式

选项 1 的代码:

%\documentclass[professionalfont]{beamer}
%  or better (according to a warning in log file if the above):
\documentclass {beamer}
\usefonttheme {professionalfonts}

\usepackage[T1]{fontenc}
\usepackage{libertine}

\renewcommand{\familydefault}{\sfdefault}
\usepackage[defaultmathsizes]{mathastext}
\renewcommand{\familydefault}{\rmdefault}
\begin{document}
\begin{frame}

  This is serif text, $sans math:E=mc^2$ (we see it is upright and sans), and
  then display math which is also upright and sans:
  \[
  E=mc^2=abc;XYZ=tuv=TUV<123?
  \]

  Some serif text and then display math (with align)
  \begin{align} 
   E=mc^2=abc;XYZ=tuv=TUV<123?
  \end{align}

\end{frame}
\end{document}

选项 2:破解,但没有数学文本

投影机直立

选项 2 的代码:

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\usefonttheme[stillsansserifmath]{serif}

\makeatletter
\AtBeginDocument{\begingroup
   \count0 \sympureletters
   \count2 \symnumbers
  \@tfor\x:=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\do
  {\global\expandafter\mathcode\expandafter`\x=\numexpr\expandafter\mathcode\expandafter`\x-\count0*256+\count2*256\relax}\endgroup}
\makeatother

\begin{document}
\begin{frame}

  This is serif text, $sans math:E=mc^2$ (we see it is upright and sans), and
  then display math which is also upright and sans:
  \[
  E=mc^2=abc;XYZ=tuv=TUV<123?
  \]

  Some serif text and then display math (with align)
  \begin{align} 
   E=mc^2=abc;XYZ=tuv=TUV<123?
  \end{align}

\end{frame}
\end{document}


顺便说一句,与 OP 问题没有直接关系,我注意到了pdflatexlualatex/xelatex以下代码之间的差异。

\documentclass{beamer}
\usepackage{libertine}
\begin{document}
\begin{frame}
  \showboxdepth\maxdimen
  \showboxbreadth\maxdimen
  \setbox0\hbox{$=$}\showbox0\box0
\end{frame}
\end{document}

字体cmss带有pdflatex,但cmr带有lualatex/xetex

pdftex:
> \box0=
\hbox(4.05148+0.0)x8.5167
.\mathon
.\OT1/cmss/m/n/10.95 =
.\mathoff

lualatex:
> \box0=
\hbox(4.01727+0.0)x8.5167, direction TLT
.\mathon
.\OT1/cmr/m/n/10.95 =
.\mathoff

xetex:
> \box0=
\hbox(4.01727+0.0)x8.5167
.\mathon
.\OT1/cmr/m/n/10.95 =
.\mathoff

相关内容