我正在尝试在论文内容中添加一些水平条,以便将其稍微分开。但是,我发现水平条没有出现在我设置的位置。作为 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
。如果\chapter
s 在主文档中,则目录页呈现正常。显然,对于我的论文,我不希望所有内容都放在一个文件中。
答案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
无法改变。
但这里至少有三种可能的解决方案:
- 你可以
\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}
- 移入
\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}
结果和上面一样。
- 您可以加载包
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}
结果和上面一样。