从目录中的条目中删除页码

从目录中的条目中删除页码

在序言之后,我有以下文字:

\begin{document}

\frontmatter 

\maketitle


\input{introduzione.tex}

\tableofcontents

\mainmatter
...

结果如下:

在此处输入图片描述

我不想在“Introduzione”后面出现“v”字母。我该如何隐藏它?我尝试使用某种方法,\addtocontents{toc}{\protect\setcounter{tocdepth}{-1}} 但没有效果。

答案1

在默认文档类中,目录中的每个条目都通过宏进行设置\contentsline{<type>}{<title>}{<page>}。它需要三个参数,第一个参数<type>决定格式,第二个<title>和第三个参数<page>提供要设置的内容。

当你编译以下最小示例时(至少两次)

\documentclass{book}

\begin{document}

\frontmatter 

\chapter{Introduction}% ...or \input{introduction}...

\tableofcontents

\mainmatter

\chapter{Main chapter}

\end{document}

您将在 中看到以下内容.toc

\contentsline {chapter}{Introduction}{i}
\contentsline {chapter}{\numberline {1}Main chapter}{1}

您的请求是忽略第一个条目的<page>,但仍将其保留用于后续条目。也就是说,\contentsline我们想要的是类似 的东西,而不是常规的\nopagecontentsline

\let\oldcontentsline\contentsline
\newcommand{\nopagecontentsline}[3]{\oldcontentsline{#1}{#2}{}}

在处理目录时,我们必须谨慎地对重新定义进行包装。因此,在主文档中,您将使用

\addtocontents{toc}{\let\protect\contentsline\protect\nopagecontentsline}
\chapter{Introduction}% ...or \input{introduction}...
\addtocontents{toc}{\let\protect\contentsline\protect\oldcontentsline}

现在你的.toc会像

\let \contentsline \nopagecontentsline 
\contentsline {chapter}{Introduction}{i}
\let \contentsline \oldcontentsline 
\contentsline {chapter}{\numberline {1}Main chapter}{1}

更新在使用前插入,使用后恢复。

这是一个完整的最小示例:

在此处输入图片描述

\documentclass{book}

\let\oldcontentsline\contentsline
\newcommand{\nopagecontentsline}[3]{\oldcontentsline{#1}{#2}{}}

\begin{document}

\frontmatter 

\addtocontents{toc}{\let\protect\contentsline\protect\nopagecontentsline}
\chapter{Introduction}
\addtocontents{toc}{\let\protect\contentsline\protect\oldcontentsline}

\tableofcontents

\mainmatter

\chapter{Main chapter}

\end{document}

一个更简单的选择是设置介绍作为\chapter*而不是\chapter。默认情况下,\chapter*不包含在 ToC 中,因此您需要手动执行:

\chapter*{Introduction}% ...or \input{introduction}...
\addtocontents{toc}{\protect\contentsline{chapter}{Introduction}{}\%}

\%第二个参数末尾的是\addtocontents终止符。如果不添加,下一个条目将无法正确格式化。

相关内容