我正在使用 lhs2TeX 将代码转换为 LaTeX。它将代码排版为数学模式。由于我也在同一个文档中编写数学公式,因此我使用 unicode-math 在不同的数学模式字体之间切换,以使两者更加明显(并且在我的数学中使用 Unicode 符号)。
lhs2TeX 使用宏设置变量标识符\Varid
,通常设置为\mathit
。
这里的问题是,使用 unicode-math 时,\mathit
无法正常工作。我不确定这是 unicode-math 的问题还是 OpenType 数学字体的问题,但最重要的是它没有将其参数排版为文本,而是像公式一样,字母之间有额外的间距。我还发现了一个关于此的错误报告。
我可以\Varid
用重新定义\textit
,但这会导致另一个问题:我的标识符中有很多下标,而下划线在文本模式下不支持下标,所以这行不通。至少在我不用自定义 TeX 覆盖每个标识符来修复下标的情况下行不通。
这是一个演示该问题的例子。
\documentclass{minimal}
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
\usepackage{unicode-math}
\setmathfont[version=lm]{Latin Modern Math}
\setmathfont[version=pg]{TeX Gyre Pagella Math}
\begin{document}
\mathversion{lm}
% math in latin modern
$x ∼ y$
\mathversion{pg}
% haskell code in tex gyre pagella
\textit{factorial}
$\mathit{factorial}$ \quad This should look like the former, not the latter.
$factorial$
\mathversion{lm}
% latin modern again
$x ∼ y$
\end{document}
(来源:戈德德兹信息)
所以问题是:在这个设置下可以修复 mathit 吗?如果不能,我可以编写一个在数学模式下工作但选择正确字体的宏吗?或者我可以编写一个宏,在文本模式下本地重新定义下划线以执行下标吗?
编辑:这里的一个主要问题(不幸的是,这不是我的例子的一部分)是里面的 TeX 代码\Varid
(可以重新定义)通常是自动生成的,并且通常包含_
下标(否则必须为每个标识符手动重写,我尽量避免这种情况)。因此使用\text
Instead 是有问题的。
编辑:事实上,这并不完全正确,因为像 这样的内容x1
会被翻译成,当定义为 这样的内容\Varid{x}_1
时,它就可以工作\Varid
\newfontfamily\haskvarfont{TeX Gyre Pagella}
\renewcommand{\Varid}[1]{\text{\haskvarfont\emph{#1}}}
答案1
这是错误决策的后果unicode-math
:他们将\mathit
正常的数学字母命名为斜体,而不是遵守 LaTeX 惯例将其称为\mathnormal
;\mathit
应该选择文本斜体字体,以便进行unicode-math
直接替换。
我不会期望在unicode-math
加载或未加载时会有不同的输出;但是这个简单的例子显示了这个错误:
\documentclass{article}
%\usepackage{unicode-math}
\begin{document}
$\mathit{different}$
$different$
\end{document}
unicode-math
如果注释掉这一行,我们得到
如果我取消注释该行,我会得到
即确实错误的。
解决方法:
定义一个新的数学字母表:
\documentclass{article}
\usepackage{unicode-math}
\DeclareMathAlphabet{\Lmathit}{\encodingdefault}{\familydefault}{m}{it}
\begin{document}
$\Lmathit{different}$
$different$
\end{document}
如果你使用lhs2TeX
,你可以添加
\renewcommand{\Conid}[1]{\Lmathit{#1}}
\renewcommand{\Varid}[1]{\Lmathit{#1}}
加载后。
这不应该引发错误;如果引发错误,则将你在和Too many math alphabets
之间找到的代码添加到\makeatletter
\makeatother
https://tex.stackexchange.com/a/100428/4427