tocloft 的内容排序不正确

tocloft 的内容排序不正确

我正在尝试在论文内容中添加一些水平条,以便将其稍微分开。但是,我发现水平条没有出现在我设置的位置。作为 MWE,我编写了以下文档:

\documentclass{report}

%Horizontal line in toc
\usepackage{tocloft}
\newcommand\tocrule{\cftaddtitleline{toc}{chapter}{\rule{\textwidth}{0.4pt}}{}}

\begin{document}
\tableofcontents
\include{chapter1}
\tocrule
\include{chapter2}
\end{document}

文件 chapter1 简单\chapter{My chapter 1}而 chapter2 类似\include{chapter2}。当我创建文档时,水平条位于目录中的第 2 章下方。\cftaddtitleline和之间的交互发生了一些奇怪的事情\include。如果\chapters 在主文档中,则目录页呈现正常。显然,对于我的论文,我不希望所有内容都放在一个文件中。

答案1

\cftaddtitleline{toc}{chapter}{\rule{\textwidth}{0.4pt}}{}写入\@writefile{toc}{\contentsline {chapter}{\rule {\textwidth }{0.4pt}}{}}主辅助文件,当当前页面被发送出去时

\include写道立即一个@输入将包含的 tex 文件的自身辅助文件的命令发送到主辅助文件。因此,如果命令与特殊辅助文件的命令\cftaddtitleline出现在同一个页面上,则在…之前转到主辅助文件。\include\@input\@writefile{toc}

因此,示例生成的主要辅助文件是:

...
\@input{chapter1.aux}
\@input{chapter2.aux}
\@writefile{toc}{\contentsline {chapter}{\rule  {\textwidth }{0.4pt}}{}}
...

据我所知,这种行为\include无法改变。

但这里至少有三种可能的解决方案:

  1. 你可以\input使用\include
\begin{filecontents}[overwrite]{chapter1.tex}
\chapter{Foo}
\end{filecontents}
\begin{filecontents}[overwrite]{chapter2.tex}
\chapter{Bar}
\end{filecontents}

\documentclass{report}
%Horizontal line in toc
\usepackage{tocloft}
\newcommand\tocrule{\cftaddtitleline{toc}{chapter}{\rule{\textwidth}{0.4pt}}{}}

\begin{document}
\tableofcontents
\input{chapter1}
\tocrule
\input{chapter2}
\end{document}

在此处输入图片描述

  1. 移入\tocrule文件 chapter2.tex:
\begin{filecontents}[overwrite]{chapter1.tex}
\chapter{Foo}
\end{filecontents}
\begin{filecontents}[overwrite]{chapter2.tex}
\tocrule
\chapter{Bar}
\end{filecontents}

\documentclass{report}
%Horizontal line in toc
\usepackage{tocloft}
\newcommand\tocrule{\cftaddtitleline{toc}{chapter}{\rule{\textwidth}{0.4pt}}{}}

\begin{document}
\tableofcontents
\include{chapter1}
\include{chapter2}
\end{document}

结果和上面一样。

  1. 您可以加载包scrlfile并使用\BeforeFile{chapter2.tex}{\tocrule}之前\include{chapter2}
\begin{filecontents}[overwrite]{chapter1.tex}
\chapter{Foo}
\end{filecontents}
\begin{filecontents}[overwrite]{chapter2.tex}
\chapter{Bar}
\end{filecontents}

\documentclass{report}
%Horizontal line in toc
\usepackage{tocloft}
\newcommand\tocrule{\cftaddtitleline{toc}{chapter}{\rule{\textwidth}{0.4pt}}{}}

\usepackage{scrlfile}

\begin{document}
\tableofcontents
\include{chapter1}
\BeforeFile{chapter2.tex}{\tocrule}
\include{chapter2}
\end{document}

或者

\begin{filecontents}[overwrite]{chapter1.tex}
\chapter{Foo}
\end{filecontents}
\begin{filecontents}[overwrite]{chapter2.tex}
\chapter{Bar}
\end{filecontents}

\documentclass{report}
%Horizontal line in toc
\usepackage{tocloft}
\newcommand\tocrule{\cftaddtitleline{toc}{chapter}{\rule{\textwidth}{0.4pt}}{}}

\usepackage{scrlfile}
\BeforeFile{chapter2.tex}{\tocrule}

\begin{document}
\tableofcontents
\include{chapter1}
\include{chapter2}
\end{document}

结果和上面一样。

相关内容