我花了一整晚(确实)才弄明白。
编译两次中有一次失败,原始错误如下(第 12 行):“空间因子错误 (0)”。
这太疯狂了,因为语法中没有任何内容使得这一行与其他类似的例子有任何不同。
我最终明白了,问题在于我在上一行中使用了“写”这个词作为标签(我曾有点怀疑这一点,但最初认为这个假设太牵强,所以忽略了它)。
该问题出在“Philex”包的 \lb(x) 命令的内部结构中。
老实说,大家应该知道这一点,因为如果你不了解这一点,找到问题的根源就非常困难,而且无论如何,你都会浪费很多宝贵的时间。所以这也是我花时间写这篇文章的原因。
下面的代码编译得很好,因为我使用“Write”而不是“write”,但其他每次运行都会失败 - PDFtex,Xetex 或 Luatex)。
\documentclass{report}
\usepackage{philex}
\begin{document}
\lb{wripo}{
\lba{wripoa}{
\lba{writing}{I read all of John's writings.}
\lbz{poem}{I read all of John's poems.}}
\lbz{wripob}{
\lba{Write}{I read all of what John wrote.} % Using “write” as a label causes compilation failure every other run. => “Bad space factor (0). ...ized}{I read all of what John poetized.}}}”
\lbz{poetized}{\oddity{*}I read all of what John poetized.}}}
\end{document}
所以我的问题是:是否有其他我应该避免用作标签的词语,是否存在一种特定的方法可以将“特殊词语”视为普通词语,即“逃避”它们的编码属性?
非常感谢。
答案1
当你使用\lba{something}
该philex
包时,基本上会写入辅助文件
\gdef\something{\ref{#2}}
这意味着它将破坏任何同名的命令。在您的示例中,它破坏了原始\write
命令,但例如\lba{section}
在两次编译之后会将输出更改\section{Hallo}
为:
7 故障排除中的文档中提到了这个问题,其中说
尤其是对于短标签,有时会发生生成的标签与 TeX、LaTeX 或某些文档类或包定义的控制序列相吻合的情况
在我看来,这是相当轻描淡写的说法。定义这样的命令是非常糟糕的编码,我不会使用这样做的包。但如果你必须使用它:使用带有前缀和特殊字符的标签,例如vincent!write?
。发生冲突的可能性就会小得多。