使用 memman.pdf 中的代码设置小节的段落会导致神秘的编译错误

使用 memman.pdf 中的代码设置小节的段落会导致神秘的编译错误

我试图模仿回忆录手册中长目录的风格。具体来说,我想要实现的效果是将所有小节名称和页码放在同一段中,消除点。请参阅下图,这是回忆录手册的屏幕截图。我想要实现的效果的一个例子,分段

回忆录手册的第 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}
}

相关内容