这是我最小的LaTeX文档:
\documentclass{article}
\usepackage[polutonikogreek,english]{babel}
\newcommand{\Gk}[1]{\selectlanguage{polutonikogreek}#1\selectlanguage{english}}
\usepackage{ledmac}
\newcommand{\cn}[1]{\Afootnote{#1}}
\usepackage{ledpar}
\begin{document}
\beginnumbering
\pstart
\edtext{apostle}{\cn{\Gk{apostoloc}}}
\pend
\endnumbering
\end{document}
执行latex test.tex
会产生以下错误:
...
Section 1 (./test.1)
! Missing control sequence inserted.
<inserted text>
\inaccessible
l.15 \pend
?
一些注意事项:
尽管出现错误,但生成的DVI
看起来还不错。
评论\usepackage{ledpar}
可以解决问题。
不使用\Gk
命令也可以解决问题。 (但有点挫败了脚注的目的。)
这里发生了什么以及如何解决错误消息?
答案 0 :(得分:1)
根据FAQ:
有时,LaTeX会保存稍后会重读的数据。这些数据通常是某些命令的论据;他们就是所谓的动人论点。 ('移动',因为数据被移动。)候选者是可以进入目录,数字列表等的所有参数;即,写入辅助文件并稍后读取的数据。其他地方是那些可能出现在头部或边线的数据。章节标题和人物标题是最突出的例子; Lamport的书中有一份完整的清单(参见TeX相关书籍)。
幕后真的发生了什么?移动参数中的命令通常在保存过程中扩展为其内部结构。有时,此扩展会导致无效的TeX代码,该代码在扩展期间或再次处理代码时显示。使用“\ protect \ cmd”保护命令告诉LaTeX将\ cmd保存为\ cmd,而根本不扩展它。
所以\Gk
命令在TeXing文件的过程中过早地扩展并导致非法代码。最简单的解决方案是声明命令robust:
\usepackage{makerobust}
\DeclareRobustCommand{\Gk}[1]{\selectlanguage{polutonikogreek}#1\selectlanguage{english}}
至于为什么使用ledpar
包产生错误,我不太确定。为了便于并行文本左侧和右侧的注释,ledpar
包需要重新定义ledmac
包提供的几乎所有命令。虽然我没有找到令人讨厌的区别,但是一个或多个重新定义必须导致脆弱的命令过早扩展。