我希望“目录”位置出现在目录中。我正在\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
最好的解决方案是使用文档类的一个特性,如果该类支持这个特性的话:
- KOMA-Script 课程:
\setuptoc{toc}{totoc}
- 班级
memoir
:\tableofcontents
默认添加自引用,它被星号形式抑制\tableofcontents*
。
对于其他类,包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