在内联样式和显示样式公式中使用不同的数学字体

在内联样式和显示样式公式中使用不同的数学字体

我想在内联样式数学模式 ( $...$) 和显示的方程式(例如\begin{equation} ... \end{equation})中使用不同的字体。目前,我使用

\setmainfont{Frutiger 45 Light}
\setmathrm{Cambria Math}
\setmathfont(Digits,Latin){Cambria Math}

但我也想在数学模式下使用 Frutiger,这样内联数学的字体样式就不会中断。我尝试定义一个新命令

\newcommandx{\textvar}[1]{
{
\setmathrm{Frutiger 45 Light}
\setmathfont(Digits){Frutiger 45 Light}
#1
}
\setmathrm{Cambria Math}
\setmathfont(Digits,Latin){Cambria Math}
}

\setmath*似乎只在序言中起作用,而不在文档本身中起作用。

有什么办法可以做到这一点?

答案1

由于我们是优秀排版的粉丝,因此关于最佳实践的讨论始终是强制性的且重要的。

我赞同克里斯上述的说法:

请不要在家尝试!

% arara: lualatex

\documentclass{article}
\usepackage{unicode-math}
\setmathfont[version=lm]{Latin Modern Math}
\setmathfont[version=asana]{Asana Math}

\begingroup
\catcode`\$=\active
\protected\gdef$#1${\mathversion{asana}\(#1\)\mathversion{lm}}
\endgroup
\AtBeginDocument{\catcode`\$=\active}

\begin{document}
    \mathversion{lm}
    \begin{equation}E=mc^2\end{equation} where $E$ stands for energy \begin{equation}E=mc^2\end{equation}
\end{document}

编辑

在评论中,您提到您想保留旧的行为。在这种情况下,您应该(强烈建议)为此类事情定义一个新命令:

\newcommand*{\myinlinemath}[1]{{\mathversion{asana}\ensuremath{#1}}}

编辑2

对于您的示例,我仅建议使用以下siuntix包:

% arara: xelatex

\documentclass{article}
\usepackage{fontspec}
\setmainfont{linux libertine o}
\usepackage{siunitx}

\begin{document}
\begin{equation}E=mc^2\end{equation}

something like \SI{2.8 \pm 0.5}{\mu\metre} in the middle of a line

\sisetup{detect-all}
something like \SI{2.8 \pm 0.5}{\mu\metre} in the middle of a line
\end{document}

在此处输入图片描述

答案2

这里有一个解决方案,它使用\everymath\everydisplay原语在两个预定义数学版本之间切换——“Asana Math”用于内联数学,“XITS Math”用于显示方程式。

该代码需要在 LuaLaTeX 下运行;出于某种原因,如果我尝试在 XeLaTeX 下编译它,我会收到“TeX 容量超出,抱歉”的错误消息。

警告:该代码已通过多种显示样式的数学环境进行了测试,但绝对没有通过所有可以想到的数学环境进行测试。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{amsmath}

\usepackage[no-math]{fontspec}
\setmainfont{Myriad Pro}

\usepackage{unicode-math}
\setmathfont[version=XITS]{XITS Math}
\setmathfont[version=Asana]{Asana Math}
\mathversion{Asana}
\everymath{\mathversion{Asana}}
\everydisplay{\mathversion{XITS}}

\setlength\textwidth{7cm} % just for this example
\begin{document}
$E=mc^2$, where $E$ stands for energy \dots 
\begin{equation} E=mc^2  \end{equation}

$E=mc^2$, where $E$ stands for energy \dots 
\begin{gather} E=mc^2  \end{gather}
\end{document}

相关内容