目录:扫描时文件结束使用 \contentsline

目录:扫描时文件结束使用 \contentsline

我尝试制作一个(非常简单的)目录,但出于某种原因,它不起作用。或者说,我有两个版本的 pdflatex,在一个版本中运行良好,在另一个版本中失败并出现以下错误:

! File ended while scanning use of \contentsline.
<inserted text>
                \par
l.7 \tableofcontents

两个版本如下(由 输出pdflatex --version):

有效的一个:

pdfTeX 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian)
kpathsea version 6.3.1
Copyright 2019 Han The Thanh (pdfTeX) et al.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the pdfTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the pdfTeX source.
Primary author of pdfTeX: Han The Thanh (pdfTeX) et al.
Compiled with libpng 1.6.37; using libpng 1.6.37
Compiled with zlib 1.2.11; using zlib 1.2.11
Compiled with xpdf version 4.01

失败的那个

pdfTeX 3.141592653-2.6-1.40.24 (TeX Live 2022)
kpathsea version 6.3.4
Copyright 2022 Han The Thanh (pdfTeX) et al.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the pdfTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the pdfTeX source.
Primary author of pdfTeX: Han The Thanh (pdfTeX) et al.
Compiled with libpng 1.6.37; using libpng 1.6.37
Compiled with zlib 1.2.11; using zlib 1.2.11
Compiled with xpdf version 4.03

mwe 非常简单:

\documentclass[]{article}

\begin{document}

\addcontentsline{toc}{section}{\protect\textbf{Appeandicies}}

\tableofcontents
\end{document}

我正在使用钩子,但第一个版本没有这个功能。我能以某种方式修复这个问题吗?或者有什么解决方法吗?或者我遗漏了目录定义中的某些内容?

答案1

如果您与不同的 TeX Live 安装共享文件,并且其中一个与第一个一样旧,则应始终删除辅助文件,如*.aux、、等。问题不在于*.toc版本,而在于 LaTeX 的版本。TeX Live 2019 的 LaTeX只有 3 个参数:*.lof*.lofpdftex\contentsline

\contentsline {section}{\textbf {Appeandicies}}{1}% 

但是 TeX Live 2022 的 LaTeX 有 4 个:

\contentsline {section}{\textbf {Appeandicies}}{1}{}%

因此,如果toc在使用新 LaTeX 运行的 LaTeX 中读取使用旧 LaTeX 运行的 LaTeX 文件,则在尝试读取第四个参数时,可能会失败,并显示显示的错误消息。

但是,使用不同版本的 TeX Live 安装可能会出现其他一些问题,因为不仅 LaTeX 版本不同,而且多个软件包也不同。因此,多个软件包(甚至 LaTeX 内核)的用户界面可能会发生变化。有时您可以进行回滚,以便在新的 TeX Live 发行版中使用旧版本的软件包,例如,对于 LaTeX,您可以使用软件包latexrelease进行此类回滚。请参阅所用软件包的手册,了解是否提供回滚功能以及如何使用它们。

但肯定不是所有软件包都支持回滚。而且即使是新版本的字体也可能导致不同的换行符和分页符。因此,我建议在所有地方使用相同的 LaTeX 版本和软件包版本。这通常可以通过在所有地方使用最新的 vanilla TeX Live 或 TeX Live portable 来实现。

使用相同的版本也应该可以回答您的其他问题。我无法提供关于缺少钩子的想法或解决方法的进一步建议,因为我不知道您使用的钩子。在这里我至少需要更多信息。有时有一些包可以提供额外的钩子,例如,,,eso-pic等。如果您需要进一步的帮助etoolbox,请提出带有合适的最小工作示例的新问题。scrlfilefilehook

相关内容