考虑这个简单的例子:
\documentclass[preview]{standalone}
\usepackage[utf8]{inputenc}
\begin{document}
$\texttt{\lambda}$
\end{document}
使用lualatex运行没有问题,但是pdflatex却报错:
! Missing $ inserted.
<inserted text>
$
l.5 $\texttt{\lambda}
$
?
我认为这是由于两种工具对字体的处理方式不同,但 pdflatex 不应该报告“我无法显示此符号”吗?为什么会出现这种混淆数学模式错误?
答案1
外部$
大多不相关,因为\texttt
启动了文本模式,所以您得到完全相同的结果\texttt{\lambda}
:LuaLaTeX 中的标准数学模式 lambda(提供的数学字体已经初始化,这在您的示例中正是因为数学模式已经启动而发生的)以及旧式 TeX 引擎和 XeLaTeX 中的错误。
宏\lambda
是一个\mathchardef
标记(一如既往),因此在 LaTeX 中没有“主动”选择,它只是从引擎继承而来。LuaTeX\mathchar
中的行为已被改变,以允许它在数学模式之外:
非数学模式下允许的数学命令 命令
\mathchar
、和 和 控制序列是或\Umathchar
的结果, 在水平和垂直模式下也是可接受的。在这些情况下,将使用请求的数学系列中的。\mathchardef
\Umathchardef
\textfont
(LuaTeX 手册,‘非数学模式下允许的数学命令’部分,LuaTeX 0.95 版本第 79 页,LuaTeX 0.80 版本第 153 页)。