我有一个类文件,需要在其中设置enumerate
和内联版本enumerate*
(由enumitem
带有选项的包提供inline
)。根据定义,这两个环境共享标签、设置等。
我希望它们能够共享级别(即,enumerate*
嵌套在enumerate
环境内的环境被识别为处于级别 2),但我需要能够调整enumerate*
环境的格式(除其他调整外,我希望它从新行开始)。
问题是我无法更改enumerate*
(例如使用\setlist
)而不更改enumerate
。我可以通过使用(例如)来解决这个问题\renewlist{enumerate*}{enumerate*}{3}
,但这样嵌套就会丢失。
以下是 MWE:
\documentclass{article}
\usepackage[inline]{enumitem}
\setlist[enumerate]{align=left,leftmargin=8mm,labelsep*=0pt}
\setlist[enumerate,1]{label=(\alph*), ref=(\alph*)}
\setlist[enumerate,2]{label=(\roman*), ref=(\roman*),leftmargin=9mm}
\begin{document}
Here's a non-nested inline enumerate list:
\begin{enumerate*}
\item blah
\item blah
\item blah
\end{enumerate*}
\begin{enumerate}
\item blah
\item Here's a nested inline list:
\begin{enumerate*}
\item blah
\item blah
\item blah
\end{enumerate*}
\end{enumerate}
\end{document}
在这个 MWE 中,挑战在于修改前导码,以便两个内联列表都从新行开始,但嵌套列表使用\roman*
标签,而非嵌套列表使用\alph*
。
如果您可以在 内完全完成此操作,则可以获得加分,enumitem
因为类文件的用户希望拥有诸如 之类的功能[resume]
。
答案1
我不想通过评论来交换代码,而是想直接发布我所拥有的代码。
在这里,我介绍了inumerate
一种内联enumerate*
变量环境,它修改了 OP 似乎感兴趣的枚举的某些参数。
\documentclass{article}
\usepackage[inline]{enumitem}
\setlist[enumerate]{align=left,leftmargin=8mm,labelsep*=0pt}
\setlist[enumerate,1]{label=(\alph*), ref=(\alph*)}
\setlist[enumerate,2]{label=(\roman*), ref=(\roman*),leftmargin=9mm}
\newenvironment{inumerate}{\begin{enumerate*}[before=\vspace{6pt}\newline,
itemjoin=\hspace{50pt}]}{\end{enumerate*}}
\begin{document}
Here's a non-nested inline enumerate list:
\begin{inumerate}
\item blah
\item blah
\item blah
\end{inumerate}
\begin{enumerate}
\item blah
\item Here's a nested inline list:
\begin{inumerate}
\item blah
\item blah
\item blah
\end{inumerate}
\item Next outer item
\end{enumerate}
\end{document}
上述不支持,resume
因为inumerate
作为一个环境,是分组的,并且 所需的数据resume
会丢失。这里我提供了一个xnumerate
支持 的伪环境resume
。
我还提供了原始inumerate
环境,经过修改以采用其他可选参数(除resume
)。
\documentclass{article}
\usepackage[inline]{enumitem}
\setlist[enumerate]{align=left,leftmargin=8mm,labelsep*=0pt}
\setlist[enumerate,1]{label=(\alph*), ref=(\alph*)}
\setlist[enumerate,2]{label=(\roman*), ref=(\roman*),leftmargin=9mm}
\newenvironment{inumerate}[1][]{\begin{enumerate*}[before=\vspace{6pt}\newline,
itemjoin=\hspace{50pt},#1]}{\end{enumerate*}}
\newcommand\xnumerate[1][]{\xnumerateaux{#1}}
\def\xnumerateaux#1#2\endxnumerate{\begin{enumerate*}[before=\vspace{6pt}\newline,
itemjoin=\hspace{50pt},#1]#2\end{enumerate*}}
\begin{document}
Here's a non-nested inline enumerate list:
\begin{inumerate}
\item blah
\item blah
\item blah
\end{inumerate}
\begin{enumerate}
\item blah
\item Here's a nested inline list:
\xnumerate
\item blah
\item blah
\item blah
\endxnumerate
\item Next outer item
\xnumerate[resume]
\item blah
\item blah
\item blah
\endxnumerate
\item Next outer item
\end{enumerate}
\end{document}