! 扫描 \@xs@testcase 的使用时文件结束

! 扫描 \@xs@testcase 的使用时文件结束

我的脚本产生这个错误:

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}}

相关内容