如何使用 tocloft 创建出现在文档中间的列表

如何使用 tocloft 创建出现在文档中间的列表

我有一个 IEEE(conf)格式的文档,我想使用 添加一个新环境tocloft。相关代码如下(略有缩写):

\documentclass[conference]{IEEEtran}
\usepackage[titles]{tocloft}
\newcommand{\listexampletitle}{List of Examples}
% FIXME: Should be styled as a "normal" subsection
\newlistof{examples}{exp}{\listexampletitle}
% FIXME: Remove page numbers
\newcommand{\examplelist}[1]{%
  \refstepcounter{examples}
  \addcontentsline{exp}{examples}
  {\protect\numberline{\theexamples}#1}
}
\newcommand{\example}[1]{\examplelist{#1}\textbf{Example}: #1}
\begin{document}
\section{A section}
\example{A first example}
\listofexamples
\end{document}

结果如下:

上述代码的输出

尽管使用titles带有\usepackage[titles]{tocloft}标题的选项,示例列表看起来更像是\section*而不是\section。这很有意义,因为默认情况下通常会生成一个表格作为书籍前言的一部分。但是,我希望该标题是正常的,\section因为它将出现在文档的中间。这可能吗?

其次,如何删除每个项目的页码\listofexamples,以便仅列出示例本身?

答案1

section这个问题的第一部分可以通过自动增加计数器并手动将其插入到表标题中来解决,如下所示:

\newcommand{\listexampletitle}{\addtocounter{section}{1}\thesection.~List of Examples}

这个问题的第二部分(如何删除页码)可以通过使用\cftpagenumbersoff{XXX}宏来回答(XXX新列表的长格式名称在哪里)。

在这种情况下,更正后的代码如下所示:

\newcommand{\listexampletitle}{\addtocounter{section}{1}\thesection.~List of Examples}

\newlistof[section]{examples}{exp}{\listexampletitle}

\newcommand{\examplelist}[1]{%
  \refstepcounter{examples}
  \addcontentsline{exp}{examples}
  {\protect\numberline{\theexamples}#1}
}

\newcommand{\example}[1]{\examplelist{#1}\textbf{Example \theexamples}: #1}

\cftsetindents{examples}{1.5em}{3.0em}
\cftpagenumbersoff{examples} % Don't print page numbers with examples
\setlength{\cftexamplesnumwidth}{1.5cm} % Add space around example numbers

结果如下:

在此处输入图片描述

答案2

问题的第一部分需要这样一种 hack 方法来解决,这确实很不幸。tocloft设置为定义其自己的标题格式,并titles简单地将其关闭以使用类定义的任何内容(例如\section*)。因此,目前还没有办法tocloft将其更改为未加星标的部分。

我添加了一个问题在其 Github 页面上解决了这个问题。

为了使其立即正常工作,您可以重新定义\listofexamples命令:(其定义相当容易理解)

\makeatletter
\renewcommand\listofexamples{%
  \@cfttocstart
  \if@cfthaschapter
    \chapter{\listexampletitle}%
  \else
    \section{\listexampletitle}%
  \fi
  \@nameuse{cftmarkexp}%
  \@starttoc{exp}%
  \@cfttocfinish 
}
\makeatother

或者,\patchcmd来自的命令toolbox对于这种修复非常有用:

\usepackage{etoolbox}
\patchcmd\listofexamples{\section*}{\section}{}{}

相关内容