我想在目录中在章节名称下方添加一些评论文字。以下目录中没有页码的章节我对此进行了修改,创建了一个\fakesection
隐藏页码的命令。它看起来很棒(见下面的渲染),但它不会与包共存hyperref
。第二次失败pdflatex
如下:
[Loading MPS to PDF converter (version 2006.09.02).]
))) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty))
(./test.out) (./test.out) (./test.toc
! Argument of \contentsline has an extra }.
<inserted text>
\par
l.3 \contentsline
{chapter}{\numberline {2}EFGH}{5}{chapter.2}%
?
如果我只有一章,结果如下:
[Loading MPS to PDF converter (version 2006.09.02).]
))) (/usr/share/texlive/texmf-dist/tex/latex/hyperref/nameref.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/gettitlestring.sty))
(./test.out) (./test.out) (./test.toc)
Runaway argument?
! File ended while scanning use of \contentsline.
<inserted text>
\par
l.23 \tableofcontents
?
以下是 MWE 和 TOC 的呈现:
\documentclass[12pt]{book}
\usepackage{tocloft}
\usepackage{lipsum}
% Uncommenting this will result in ! Argument of \contentsline has an extra }.
%\usepackage[pdfusetitle,colorlinks]{hyperref}
\newcommand\fakesection[2][]{%
\ifx&%
\fakesection[#2]{#2}%
\else
\section*{#2}%
\sectionmark{#1}%
\addtocontents{toc}{\protect\contentsline{section}{#1}{}}%
\fi
}
\renewcommand\cftchapdotsep{\cftdotsep}%
\renewcommand\cftsecdotsep{200}
\makeatletter
\renewcommand\cftsecpagefont{\@gobble}
\makeatother
\begin{document}
\tableofcontents
\chapter{ABCD}
\fakesection{The First Four Letters}
\lipsum[1-5]
\chapter{EFGH}
\fakesection{The Next Four Letters}
\lipsum[6-10]
\chapter{IJKL}
\fakesection{Halfway Through}
\lipsum[11-15]
\chapter{MNOP}
\fakesection{The Middle of the Alphabet}
\lipsum[16-20]
\chapter{QRST}
\fakesection{Over the Hill of Letters}
\lipsum[21-25]
\chapter{UVWX}
\fakesection{Almost Done}
\lipsum[26-30]
\chapter{YZ}
\fakesection{The Two Stragglers}
\lipsum[31-35]
\end{document}
答案1
\contentsline
应该有四参数,因为 hyperref 需要这个(它将目标名称存储在第四个参数中)。在当前的 LaTeX 中\contentsline
始终有四个参数,因此即使不涉及 hyperref,使用四个参数也不会有什么坏处。
还可以删除\renewcommand\cftsecpagefont{\@gobble}
或在第三个参数中放入一些可以实际处理的\contentsline
内容\@gobble
。