我的脚本产生这个错误:
Runaway argument?
\section *{Serumnatrium} \par \ib {Zweck}{ \el { * Wasserverteilung *\ETC.
! File ended while scanning use of \@xs@testcase.
<inserted text>
\par
不幸的是,我无法创建一个产生错误的最小示例。据我所知,必须有一个空格被解释为参数(?),但我找不到导致错误的位置,因为我有一些宏正在将参数转发给其他宏。
我找到了那个帖子:\IfStrEqCase 的最后一个可选参数有问题,添加\tracingmacros=1
并得到一个 140MB 的日志文件。但我不知道如何解释这些数据。
我在文件中寻找什么?
编辑:我认为错误可能与一个宏有关,该宏在定义中有 3 个参数,但有时只用 2 个参数调用,而 3 个参数是不需要的。
答案1
评论太长了。
“失控参数”错误的典型原因有:
- 缺少结束论点括号。
- 缺少宏的参数,导致宏的内部结构混乱。
- 漏洞。
缺少结束参数括号的示例:
\documentclass{article}
\begin{document}
Hello \textbf{World!
\section{Foobar}
\end{document}
TeX 抱怨:
Runaway argument?
{World! \section {Foobar} \end {document}
! File ended while scanning use of \textbf .
<inserted text>
\par
错误信息的帮助文本:
? h
I suspect you have forgotten a `}', causing me
to read past where you wanted me to stop.
I'll try to recover; but if the error is serious,
you'd better type `E' or `X' now and fix your file.
TeX 抛出错误的地方是 TeX 发现错误的位置,例如,\par
在没有\long
参数的情况下的下一个空行()或者甚至是文件末尾。
不过,还是有线索的:
错误消息包含宏,此处
\textbf
。请注意末尾属于宏名称的空格。它是\textbf
源代码中写入的内部命令。在你的情况下是的
\@xs@testcase
。它可能是包中的一个内部宏xstring
。如果你正在使用该包的宏,那么它可能是一个线索,你可以检查参数。参数的开头在下面的行中给出
Runaway argument?
。 在您的例子中,参数以 开头\section *{Serumnatrium}
。 这看起来像用户代码,并且是位置的强烈提示。 找到它并检查之前的源代码。
分析\tracingmacros
\tracingmacros=1
是分析此类错误的有用工具。但写入文件的数据量.log
确实可能非常大。将其移近错误位置以限制数据。甚至可以使用它来定位错误。如果\tracingmacros=1
使用得太晚,则.log
文件不会显示其输出。使用二分搜索的方法,可以有效地找到问题的位置。
运行 TeX 时,使用 退出,在出现错误时停止x
。然后.log
文件被读取向后。因此数据量并不重要(除非磁盘空间不足)。
理解 的输出需要一定的经验\tracingmacros
。但只要查看已展开的宏名称或已处理的参数,就能提供有价值的线索。例如,这些线索有助于在源头找到问题。专家可以研究内部结构来分析错误。
答案2
谢谢你的长篇解释。它没有解决问题,但回答了关于如何处理日志文件的问题。
我怀疑宏没有问题,主文档中的某些字符过多或过少。所以我将一个额外的字符移到\end{document}
文档中,看看错误何时出现。就是这么简单:只是{
我无意中多加了一个字符。
前:
\ib{caption}{
\el{
* A
* B
** B1
** B2
** B3
* C}}{
后:
\ib{caption}{
\el{
* A
* B
** B1
** B2
** B3
* C}}