我正在排版带有示例代码的文档,并且经常排版元语法变量或文本。例如:
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}