我希望子列表继承其上方列表中子列表之前最后一个项目的编号。我希望实现与我的最小示例相同的效果,而无需硬编码1.
到子列表的枚举部分。
在 的文档中找不到任何enumitem
允许我访问该数字的宏。通常使用label*=
而不是 的解决方案label=
不起作用,因为我已经将其§
作为编号的一部分。
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}[label=\arabic* §]
\item Item 1
\begin{enumerate}[label=1.\arabic* §]
\item Item 2
\end{enumerate}
\end{enumerate}
\end{document}
答案1
要访问外部列表中某个项目的计数器值,请使用\theenumi
(i
代表列表的第一级,不是第一項)。
现在,诀窍是利用ref
选项来更改打印作为参考时的计数器的格式。
换句话说,\theenumi
会打印1 §
(因为label=\arabic* §
),然后内部列表会打印1 §.1 §
(因为label=\theenumi.\arabic* §
),这不是您想要的。
ref=\arabic*
因此,使用第一个列表中的选项可以使\theenumi
等于1.1 §
,正如所希望的那样。
进一步阅读:5. 全局设置来自用户指南。
平均能量损失
\documentclass{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}[label=\arabic* §, ref=\arabic*]
\item Item 1\label{foo}
\begin{enumerate}[label=\theenumi.\arabic* §, ref=\theenumi.\arabic*]
\item Item 2\label{faa}
\end{enumerate}
\end{enumerate}
In \ref{foo} we find \ref{faa}.
\end{document}
答案2
以下是比以下更通用的解决方案西格尔的:
\documentclass{article}
\usepackage{enumitem}
\makeatletter
\newcommand{\prevlabel}{\csname theenum\romannumeral\numexpr\enit@depth-1\endcsname}
\makeatother
\begin{document}
\begin{enumerate}[label=\arabic* §,ref=\arabic*]
\item Item 1
\begin{enumerate}[label=\prevlabel.\arabic* §,ref=\prevlabel.\arabic*]
\item Item 2
\begin{enumerate}[label=\prevlabel.\arabic* §]
\item Item 3
\end{enumerate}
\end{enumerate}
\end{enumerate}
\end{document}
\theenum<roman>
它使用当前enumerate
深度(存储在)进行拾取\enum@depth
。