我无法弄清楚需要做什么才能替换标准回忆录中的页码\tableofcontents
。
使用标准\tableofcontents
我得到:(其中 5 和 9 是页码)
1 章 .................. 5
2 另一章...... 9
目标是:
第1章
另一章...... 2
\renewcommand{\chapternumberline}[1]{}
我发现会从内容左边删除章节号。
并\renewcommand{\cftchapterformatpnum}[1]{}
允许我修改零件编号,但我想我可能走错了方向?可能是描述格式的命令,只需删除页码并用输出章节号的代码替换该部分,但我还没有找到这一点。
答案1
可以定义\mempreaddchaptertotochook
和\mempostaddchaptertotochook
钩子来防止将\addcontentsline
页码写入到.aux
文件中。
hyperref
然而,由于 的特殊添加,此功能尚无法使用hyperref
。
\documentclass{memoir}
\let\origaddcontentsline\addcontentsline % Store the original definition of `\addcontentsline`
\renewcommand{\mempreaddchaptertotochook}{%
\renewcommand{\addcontentsline}[3]{%
\addtocontents{##1}{\protect\contentsline{##2}{##3}{\thechapter}}} % Use the chapter number, not the page number
}
\renewcommand{\mempostaddchaptertotochook}{%
\let\addcontentsline\origaddcontentsline% We've written the chapter entry to the toc, now switch back to the original version to get section etc. and other entries correctly!
}
\renewcommand{\chapternumberline}[1]{}
\usepackage{blindtext}
\begin{document}
\makeatletter
\tableofcontents
\chapter{My Chapter}
\blindtext[20]
\section{A section}
\blindtext
\chapter{Another Chapter}
\end{document}
答案2
我不确定这样做的目的是什么,但在这里你可以找到一个实现,并且也兼容hyperref
。
\documentclass{memoir}
\usepackage{blindtext} % just for the example
\usepackage{hyperref}
\makeatletter
\let\original@l@chapter\l@chapter
\renewcommand{\l@chapter}[2]{%
\gdef\saved@chapter@number{}%
\sbox\z@{\def\chapternumberline##1{\gdef\saved@chapter@number{##1}}#1}%
\original@l@chapter{#1}{\saved@chapter@number}%
}
\let\chapternumberline\@gobble
\makeatother
\settocdepth{chapter} % only chapters in TOC
\begin{document}
\tableofcontents
\chapter{My Chapter}
\blindtext[20]
\section{A section}
\blindtext
\chapter{Another Chapter}
\end{document}
\l@chapter
我在一个框中排版了 的第一个参数,重新定义\chapternumberline
以便它保存自己的参数。这样的重新定义是本地的,但参数是本地保存的。然后我将保存的数字作为第二个参数传递给原始的\l@chapter
,而\chapternumberline
只是\@gobble
在进行实际排版时。