我试图模仿回忆录手册中长目录的风格。具体来说,我想要实现的效果是将所有小节名称和页码放在同一段中,消除点。请参阅下图,这是回忆录手册的屏幕截图。
回忆录手册的第 171 页包含实现此效果的代码。但是,当我尝试自己编译时,总是会出现一个神秘的错误消息,尽管每次出现此错误时按 Enter 仍会产生正确的文档:
! LaTeX Error: Something's wrong--perhaps a missing \item.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
这是一个说明这一点的简单例子:
\documentclass{memoir}
\usepackage{kantlipsum}
\usepackage[bookmarks]{hyperref}
\makeatletter
\newcommand*{\setupparasubsecs}{%
\let\oldnumberline\numberline
\renewcommand{\l@subsection}[2]{%
\def\numberline####1{\textit{####1}~}%
\leftskip=\cftsubsectionindent
\rightskip=\@tocrmarg
\parfillskip=\fill
\ifhmode ,\ \else\noindent\fi
\ignorespaces
{\cftsubsectionfont ##1}~{\cftsubsectionpagefont##2}%
\let\numberline\oldnumberline\ignorespaces
}
}
\AtEndDocument{\addtocontents{toc}{\par}}
\makeatother
\begin{document}
\maxtocdepth{subsection}
\setupparasubsecs
\tableofcontents
\chapter{Research}
\kant[1-3]
\section{Survey}
\kant[1-3]
\subsection{Methodology}
\kant[1-3]
\subsection{Hypothesis}
\kant[1-3]
\subsection{Results}
\kant[1-3]
\chapter{Discussions}
\section{Survey}
\subsection{Implications \& Consequences}
\kant[1-3]
\subsection{Flaws \& Limitations}
\kant[1-3]
\chapter{Conclusions}
\kant[1-3]
\end{document}
我怀疑这可能是排版下一章标题时没有结束段落的问题。同时,逗号前也存在一些间距问题,不幸的是,上例中没有出现这种情况。
我正在使用最新的 TeXLive 2012 发行版并使用 LuaLaTeX 进行编译,但该问题在 pdfLaTeX 中也可重现。
编辑:我查看了 memsty.sty 并发现实际代码包含:
\newcommand*{\setupparasubsecs}{%
\let\oldnumberline\numberline
\renewcommand{\l@subsection}[2]{
\ifnum\c@tocdepth > 1\relax
\def\numberline####1{\textit{####1}~}%
[snip]
{\cftsubsectionfont ##1}~{\cftsubsectionpagefont##2}%
\let\numberline\oldnumberline\ignorespaces
\fi}}
\AtEndDocument{\addtocontents{toc}{\par}}%%% OK
它与 memman.pdf 中的代码不同之处在于附加了\ifnum
。显然,在后来的修订中,Peter Wilson 决定添加它,但这并没有反映在手册本身中。然而,\ifnum
似乎并没有消除错误,也没有导致文档的一些视觉变化。
编辑2:我尝试编译回忆录手册,但没有出现此错误。我想我可能在代码中遗漏了一些东西。
答案1
正如你所说,你需要结束这个段落。一种方法是:
\newcommand*{\setupparasubsecs}{%
\let\oldnumberline\numberline
\renewcommand{\l@subsection}[2]{%
\def\numberline####1{\textit{####1}~}%
\leftskip=\cftsubsectionindent
\rightskip=\@tocrmarg
\parfillskip=\fill
\ifhmode ,\ \else\noindent\fi
\ignorespaces
{\cftsubsectionfont ##1}~{\cftsubsectionpagefont##2}%
\let\numberline\oldnumberline\ignorespaces
}
\let\old@l@section\l@section
\def\l@section{\par\old@l@section}
\let\old@l@chapter\l@chapter
\def\l@chapter{\par\old@l@chapter}
}