![将列表项添加到目录中](https://linux22.com/image/321831/%E5%B0%86%E5%88%97%E8%A1%A8%E9%A1%B9%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%9B%AE%E5%BD%95%E4%B8%AD.png)
我有以下形式的列表
\begin{enumerate}
\item PARTIES
\begin{enumerate}
\item \textbf{Party A} (Buyers) and
\item \textbf{Party B} (Sellers)
\end{enumerate}
\end{enumerate}
我想根据第一个(外部)列表项创建目录。每个外部/顶级列表项都有多个嵌套列表项。
生成的目录如下
1)当事人...... 2
答案1
由于\item
没有强制参数,这并不容易。但是使用\RenewDocumentCommand
fromxparse
可以提供optional argument
using {}`(其他参数可以用 d 类型完成)
也应该进入目录的项目条目必须用 指定{...}
,否则该项目条目只会被排版,而不会包含在目录中。
请注意,如果\item[]{}
必须不[]
和之间的空间,{}
以使其工作。
我将此功能限制为enumerate
嵌套深度1
\documentclass{article}
\usepackage{letltxmacro}
\usepackage{xparse}
\makeatletter
\LetLtxMacro\latex@std@item\item
\RenewDocumentCommand{\item}{og}{%
\ifnum \@enumdepth = \@ne
\IfValueTF{#1}{%
\IfValueTF{#2}{%
\latex@std@item[#1] \addcontentsline{toc}{section}{#2}#2%
}{%
\latex@std@item[#1]
}%
}{%
\IfValueTF{#2}{%
\latex@std@item \addcontentsline{toc}{section}{#2}#2%
}{%
\latex@std@item%
}%
}%
\else
\latex@std@item \IfValueTF{#2}{#2}%
\fi
}
\makeatother
\begin{document}
\tableofcontents
\begin{enumerate}
\item {PARTIES}
\begin{enumerate}
\item \textbf{Party A} (Buyers) and
\item \textbf{Party B} (Sellers)
\begin{enumerate}
\item \textbf{Party C} Deeper nested
\end{enumerate}
\end{enumerate}
\item {Groups}
\item {Categories}
\item[\textbullet]{Types}
\end{enumerate}
\end{document}