在文本模式下使用数学字体中的字母

在文本模式下使用数学字体中的字母

我正在排版带有示例代码的文档,并且经常排版元语法变量或文本。例如:

In OCaml, one cannot assign values to variables like in Python
but one can bind the value of an expression \metasyn{expr} to
a variable \metasyn{v} and evaluate an expression with respect to it~:
\begin{lstlisting}
   let $\metasyn{v}$ = $\metasyn{expr}$ in
       $\metasyn{code to evaluate}$
\end{lstlisting}

我想用普通数学字体显示元语法元素,但在文本模式下,因为它可能包含空格,并且通常不应使用数学模式的字母间距规则。

我已经在 XeLaTeX 中使用 fontspec 和 unicode-math(两天了!)。我使用 Asana-Math 作为我的数学字体,我目前的定义\metasyn

\def\metasyn#1{\text{\fontspec{Asana-Math.otf}#1}}

但这会将文本设置为直立的 Asana-Math,而不是数学斜体字形。换句话说,我怎样才能$\metasyn{v}$使用相同的字形,$v$同时允许按我的意图排版多字母标识符和多个单词?

我以前使用 textit 和 kpfonts,文本模式斜体和数学字形看起来很相似,但我现在打算使用 Asana-Math 和 Gentium,情况不再如此。

另一方面,mathit 不尊重空格,并且不受\setmathfont{Asana-Math.otf}默认(计算机现代?)数学斜体的影响,并且看起来像默认的(计算机现代?)数学斜体。

答案1

您不能将数学斜体字形用作文本字形(至少不能以合理、简单的方式使用)。这些字形来自数学 Unicode 块。

但是 Asana-Math 是基于 Palatino 构建的,因此您可以使用 TeX Gyre Pagella 作为文本字体:

\documentclass{scrartcl}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Pagella}
\setmathfont{Asana Math}

\begin{document}
\textit{abcde} $abcde$
\end{document}

在此处输入图片描述

如果您只想将 pagella 作为\mathit字体与其他文本字体结合使用,您可以这样做:

\documentclass{scrartcl}
\usepackage{unicode-math}

\setmathfont{Asana Math}
\setmathfontface\mathit{texgyrepagella-italic.otf}

\begin{document}
\textit{abcde} $abcdef \mathit{abcdef}$
\end{document}

相关内容