examplep 包中的 \Q{foo-bar} 命令生成“rm”

examplep 包中的 \Q{foo-bar} 命令生成“rm”

我刚刚安装了一台新的 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}

生成:

pdflatex 输出示例

无论我把什么作为 \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}

在此处输入图片描述

相关内容