将目录添加到目录中 - 页码错误

将目录添加到目录中 - 页码错误

我希望“目录”位置出现在目录中。我正在\addcontentsline添加此位置,但页码似乎有点奇怪。

我有一个从第 3 页开始的目录(它占了 2 页)。但是使用以下命令组合:

\newpage
\addcontentsline{toc}{chapter}{Table of contents}
\tableofcontents
\chapter{First chapter}

我得到以下输出:

Table of contents..... 2 (should be 3!)
First chapter......... 5

当我使用这样的东西时

\newpage
\tableofcontents
\addcontentsline{toc}{chapter}{Table of contents}
\chapter{First chapter}

我也是把数字算错了:

Table of contents..... 4 (should be 3!)
First chapter......... 5

如何才能将“目录”位置正确添加到TOC?

答案1

虽然我不确定为什么有人想要在目录中添加 TOC 条目,但在某些情况下确实需要这样做:机构只知道对论文提出可笑的要求。

如果你使用tocbibind以下方式加载包

\usepackage{tocbibind}

不仅会自动出现目录,还会自动出现图表列表、表格列表、参考书目和索引。

为了以防万一,可以通过添加选项轻松避免目录中的目录nottoc

\usepackage[nottoc]{tocbibind}

为什么你的方法不起作用?因为你可能使用了双面设置。因此,\newpage将简单地结束当前页面 (1) 并\addcontentsline{toc}{chapter}{Table of contents}出现在第 2 页,但从\tableofcontents下一个右侧页面(即第 3 页)开始。

“手动”方法应该是

\cleardoublepage
\addcontentsline{toc}{chapter}{\contentsname}
\tableofcontents

但更高级的方法更可取;例如,tocbibind也可以正确地运行hyperref,而手动方法则需要另一种干预。


请注意,memoir类的声明

\tableofcontents

在目录中添加了目录;\tableofcontents*变体则没有。

答案2

正如 egreg 在评论中提到的,PEter Wilson 的软件包tocbibind支持包含默认情况下不显示在目录中的标题。通过软件包选项,您可以指示其中哪些应该出现,哪些应该被忽略。

解释一下为什么你的方法不起作用:\addcontentsline将从它在文档中的位置得出其页码。现在,如果你把它放在 前面,\tableofcontents那么数字就会少一个,因为目录中的章节将开始一个新页面。如果你把它放在 后面,那么如果目录有几页,它就会出错。所以它的位置确实需要进入 的定义,\tableofcontents这就是包的作用。

答案3

最好的解决方案是使用文档类的一个特性,如果该类支持这个特性的话:

对于其他类,包tocbibind可以使用,正如其他答案和评论中已经解释的那样。


此外\addcontentsline如果将方法放在正确的位置,无论是在定义中\tableofcontents还是在文件开头,它都会起作用.toc。后者的示例代码如下:

\documentclass{report} 

\renewcommand*{\contentsname}{Table of contents}
% if babel is loaded, e.g.:
% \addto\captionsenglish{% 
%   \renewcommand*{\contentsname}{Table of contents}%
% }

\AtBeginDocument{%
  \addtocontents{toc}{%
    \protect\addcontentsline{toc}{chapter}{\protect\contentsname}%
  }%
}   

\begin{document}
Title page\newpage
\tableofcontents* 
\chapter{Introduction}
\end{document}

首次运行后,.toc文件以

\addcontentsline {toc}{chapter}{\contentsname }
\contentsline {chapter}{\numberline {1}Introduction}{3}

第二次运行读取.toc文件并执行\addcontentsline,将.toc包含\contentsline目录的条目:

\addcontentsline {toc}{chapter}{\contentsname }
\contentsline {chapter}{Table of contents}{2}
\contentsline {chapter}{\numberline {1}Introduction}{3}

第三次运行后,目录完成:

结果

评论:

  • 该示例还显示了如何将标准名称Contents更改为Table of contents

  • 埃格勒方法更简单,因为它不需要额外的 LaTeX 运行:

    \cleardoublepage
    \addtocontents{toc}{chapter}{\contentsname}
    \tableofcontents
    

相关内容