我刚刚安装了一台新的 Windows 机器,上面安装了我常用的 MiKTeX(版本 2.9.7350)、TeXnicCenter(2.02)和 Sumatra 组合,我已经用了好几年了。不幸的是,使用 examplep 包时出现了严重错误。例如:
\documentclass{article}
\usepackage[Q=yes]{examplep}
\begin{document}
Foo \Q{bar}. Whatever I put into \Q{becomes just a rm}.
\end{document}
生成:
无论我把什么作为 \Q{} 命令的参数,它都只会变成“rm”。不过,它是用正确的等宽字体输入的。verbatim 环境工作正常,但是在我的文本中,我使用了大量 \Q{} 来在常规文本、表格等中引用源代码命令和参数。
我在虚拟机的新 Windows 上尝试过此操作,结果相同。我尝试过使用其他编辑器(TeXworks)。重新安装 MiKTeX 不管对单个用户还是所有用户都无济于事。我删除了 MiKTeX 并安装了 TeX Live,结果相同。我该如何诊断问题出在哪里?
答案1
该程序包有故障。它将某些内容存储在临时命令 ( \reserved@a
) 中,然后调用字体命令,然后使用 继续处理\reserved@a
。
但\reserved@a
不是受保护的命令,它在许多地方使用,并且假设在调用外部代码后它仍然具有正确的内容是错误的。由于 LaTeX 的字体命令已更改(现在影响\reserved@a
),此错误现在具有可见的影响。
通过重新定义字体命令,我们可以在旧系统中演示该问题:
\documentclass{article}
\usepackage[Q=yes]{examplep}
\makeatletter
\def\pexa@cverb@@verbatimfont{\def\reserved@a{XXXX}}
\makeatother
\begin{document}
Foo\Q{bar}.
\end{document}
您获得的rm
输出是字体命令\reserved@a
在处理后留下的内容:
\documentclass{article}
\begin{document}
\makeatletter
\def\reserved@a{XXXX} \reserved@a \ttfamily abc \reserved@a
\end{document}