我希望能够在一些不应格式化为列表项的中间文本之后恢复枚举列表,继续使用旧的编号。 有没有好的方法来实现这一点?
尤其是我不想要使用硬编码的初始计数器值启动第二个列表,因为如果我更改第一个列表中的项目数,该列表将会中断。
答案1
可以使用包轻松完成此操作enumitem
,例如:
\documentclass[12pt]{article}
\usepackage{enumitem}
\begin{document}
\begin{enumerate}
\item One
\item Two
\end{enumerate}
Some text
\begin{enumerate}[resume]
\item Three
\end{enumerate}
\end{document}
输出:
如果您使用\usepackage[shortlabels]{enumitem}
并已配置标签(例如,使用\begin{enumerate}[(1)]
),则可以使用 来延续这种格式[resume*]
。
或者,该软件包mdwlist
提供了命令\suspend
和\resume
用于暂时结束列表并重新启动它。
答案2
只需保存计数器然后恢复即可。没有理由使用包来做这样的事情。
\documentclass{article}
\newcounter{nameOfYourChoice}
\begin{document}
\begin{enumerate}
\item Foo
\setcounter{nameOfYourChoice}{\value{enumi}}
\end{enumerate}
Foo
\begin{enumerate}
\setcounter{enumi}{\value{nameOfYourChoice}}
\item Foo
\end{enumerate}
\end{document}
答案3
问题如何在两个枚举列表中使用相同的计数器?被关闭,因为它是这个的重复,但引入了一个细微的差异:枚举的其中一个部分位于环境内theorem
。当使用enumitem
这需要特殊处理。解决方案包含在 Mark Meckes 对上述 Carl 的回答的评论中,但鉴于新问题,我认为举一个例子是有益的。
首先,不起作用的代码:
\documentclass{article}
\usepackage{enumitem}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem} We are in the theorem environment,
\begin{enumerate}
\item\label{condition1}the first condition,
\item\label{condition2}the second condition,
\end{enumerate}
\end{theorem}
We have exited the theorem environment. We also have one more condition,
\begin{enumerate}[resume]
\item\label{condition3}\emph{the third condition}.
\end{enumerate}
\end{document}
经过 TeX 处理后,第三个条件的数字不正确1
。注释掉\begin{theorem}
和\end{theorem}
行即可得到正确的数字3
。
正确的解决方法是使用密钥series
。手册第 3.5 节对此进行了说明enumitem
。此功能是在 3.0 版中引入的。
\documentclass{article}
\usepackage{enumitem}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem} We are in the theorem environment,
\begin{enumerate}[series=theoremconditions]
\item\label{condition1}the first condition,
\item\label{condition2}the second condition,
\end{enumerate}
\end{theorem}
We have exited the theorem environment. We also have one more condition,
\begin{enumerate}[resume=theoremconditions]
\item\label{condition3}\emph{the third condition}.
\end{enumerate}
\end{document}
这样就能生成正确的编号。它还能处理中间的任意内容,包括其他列表。
以下是修改标签后的相同示例(请参阅如何在两个枚举列表中使用相同的计数器?),也展示了变体的用法resume*
。
\documentclass{article}
\usepackage{enumitem}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem} We are in the theorem environment,
\begin{enumerate}[label=(\roman*),series=theoremconditions]
\item \label{condition1}the first condition,
\item \label{condition2}the second condition,
\end{enumerate}
\end{theorem}
We havve exited the theorem environment. We also have one more condition,
\begin{enumerate}[resume*=theoremconditions]
\item \label{condition3}\emph{the third condition}
\end{enumerate}
\begin{theorem}
We have another theorem, based on \ref{condition3}.
\end{theorem}
\end{document}
答案4
一个简单的替代方法是使用 outlines 包。使用 outlines 包,您可以获得一个包含 4 个枚举级别的列表以及第 0 层常规文本。级别从纯文本到最缩进的文本由 \0、\1、\2、\3 和 \4 引用。
\documentclass[12pt]{article}
\usepackage{outlines}
\begin{document}
\begin{outline}[enumerate]
\1 One
\1 Two
\0 Some text
\1 Three
\2 Sub-point to three
\1 Four
\end{outline}
\end{document}
为了计数超过零级,需要做一些额外的工作。我们将定义一个新的计数器来跟踪有序列表中的项目数,适用于任何深度。发生这种情况的环境称为 cenumerate——即继续枚举。要在 i、ii、iii 或 iv 中的任何 k 级使用此环境,只需在大纲开始之前使用命令 \renewcommand{outlinek}{cenumerate}。请注意,这甚至会继续跨大纲计数!要重置计数器并返回默认行为,请使用命令 \renewcommand{outlinek}{enumerate}。以下代码演示了这些想法。
\documentclass[12pt]{article}
\newcounter{cenum}
\newcounter{cenumsaved}
\setcounter{cenumsaved}{0}
\newcommand{\labelcenum}{\arabic{cenum}.}
\newenvironment{cenumerate}%
{\begin{list}{\labelcenum}{\usecounter{cenum}}%
\setcounter{cenum}{\value{cenumsaved}}}%
{\setcounter{cenumsaved}{\value{cenum}}%
\end{list}}
\usepackage{outlines}
\begin{document}
\noindent \textit{This outline counts level one without stopping.}
\renewcommand{\outlinei}{cenumerate}
\begin{outline}
\1 One
\1 Two %\setcounter{outlinetemp}{\value{outlinei}}
\0 Some text
%\setcounter{\outlinei}{3}
\1 Three
\2 Sub-point to three
\1 Four
\end{outline}
\noindent \textit{This outline counts level two without stopping}
\renewcommand{\outlinei}{itemize}
\renewcommand{\outlineii}{cenumerate}
\setcounter{cenumsaved}{0}
\begin{outline}
\1 One
\2 another point to one
\1 Two %\setcounter{outlinetemp}{\value{outlinei}}
\2 another point to two
\0 Some text
%\setcounter{\outlinei}{3}
\1 Three
\2 Sub-point to three
\2 second sub-point to three
\1 Four
\end{outline}
\noindent \textit{Back to the default way}
\renewcommand{\outlinei}{enumerate}
\renewcommand{\outlineii}{enumerate}
\begin{outline}[enumerate]
\1 One
\1 Two
\0 Some text
\1 Three
\2 Sub-point to three
\1 Four
\end{outline}
\end{document}