如何删除目录中章节标题的页码,而不删除序言页的页码?
例如,在我的目录中,
Acknowledgments ii
table of contents iii
...
abstract viii
Chapter
1 Chapter one 1
1.1 Section one 1
...
2 Chapter two 2
2.1 Section one 2
... and so on...
如何在不触及序言页码的情况下删除与章节标题相关的第一个页码 1 或 2?
至于文档类,我正在使用\documentclass[doublelespace,tocchapterhead]
,以及.cls
我认为最初调用的文件chicagothesis
或类似的东西。
我曾尝试删除#2
:
\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
但结果是,所有页眉的页码都被删除了。有什么办法可以控制吗?我不想使用tocloft
包或etoolbox
包。
答案1
下列应该适用于大多数文档类别,尽管没有实际的文档类别则很难测试。
您可以使用以下宏选择性地打开目录中的页码使用:\gobbletocpage
和\restoretocpage
。前者重新定义\addtocontents
,用 替换\thepage
(\relax
实际上什么都不做),而后者将其恢复为\thepage
。
\documentclass{book}
\newcommand{\gobbletocpage}{%
\renewcommand{\addcontentsline}[3]{%
\addtocontents{##1}{\protect\contentsline{##2}{##3}{\relax}}}
}%
\newcommand{\restoretocpage}{%
\renewcommand{\addcontentsline}[3]{%
\addtocontents{##1}{\protect\contentsline{##2}{##3}{\thepage}}}
}%
\begin{document}
\tableofcontents
\chapter{A chapter}
\section{A section}
\section{A section}
\gobbletocpage
\section{A section}
\chapter{Another chapter}
\restoretocpage
\section{A section}
\section{A section}
\section{A section}
\end{document}
举例来说,在调用\gobbletocpage
(第 1.3 节和第 2 章)之后,上述目录中没有页码,可以使用 进行恢复\restoretocpage
。
由于您可以访问.cls
,请将您的定义\l@chapter
(和一些周围的代码)替换为以下内容(第 182-219 行):
% Change style of printing chapters in ToC to match chapter headings.
\setcounter{secnumdepth}{3}% Always number up to \subsubsection
\setcounter{tocdepth}{2}% Include up to \subsection in ToC
\newcommand{\thechappagenum}{}% Empty page number for chapter
\newif\ifchappagenum\chappagenumtrue
\renewcommand*\l@chapter[2]{%
\renewcommand{\thechappagenum}{\ifchappagenum#2\fi}% Include chapter page num based on \chappagenum boolean
\typeout{\thechappagenum}
\ifnum \c@tocdepth >\m@ne
\addpenalty{-\@highpenalty}%
\vskip .1cm \@plus \p@ %{the v-distance between the headings in the contents}
\setlength\@tempdima{1.5em}% %{the distance between the number of the chapter and its title}
\begingroup
\parindent\z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode
\advance \leftskip \@tempdima
\hskip -\leftskip
\etchapterheadstyle{#1}\nobreak
% : The following 3 lines add dots to the chapter TOC listings
\leaders\hbox{$\m@th
\mkern \@dotsep mu\hbox{.}\mkern \@dotsep
mu$}\hfill
\hfil \nobreak\hb@xt@\@pnumwidth{\hss \thechappagenum}\par
\penalty\@highpenalty
\endgroup
\fi}
%---------------------------------------------------
% The lines below responsible on the mechanism of removing pages numbers of selecting headers in ToC.
% We need to add the command \gobbletocpage in the preamble before the \include{chapter} to delete their page numbers in ToC. And,
% we need to add the command \restoretocpage to restore chapter page numbering in ToC
%---------------------------------------------------
\newcommand{\gobbletocpage}{%
\addtocontents{toc}{\protect\chappagenumfalse}}%
\newcommand{\restoretocpage}{%
\addtocontents{toc}{\protect\chappagenumtrue}}%
%---------------------------------------------------
以上定义了一个新的布尔“条件”,\ifchappagenum
该条件被设置为false
( \chappagenumfalse
) by\gobbletocpage
和true
( \chappagenumtrue
) by \restoretocpage
。所有这些都写入文件.toc
,因为这是在没有任何知识的情况下/在文档其余部分之前处理的。
使用\gobbletocpage
前您不想在目录中添加页码的章节,以及\restoretocpage
前您想要恢复章节页码。可以修改此条件,并根据需要重新格式化章节目录条目(而不仅仅是页码)。以下是您的easythesis.cls
在 MWE 中使用上述修改后:
\documentclass{easythesis}
\begin{document}
\tableofcontents
\chapter{A chapter}
\section{A section}
\section{A section}
\section{A section}
\gobbletocpage
\chapter{Another chapter}
\section{A section}
\section{A section}
\section{A section}
\end{document}