枚举/项目作为环境

枚举/项目作为环境

在以下 MWE 中

\documentclass[draft]{article}

\newenvironment{myitem}{\item}{}%

\begin{document}

\begin{enumerate}
\item \begin{enumerate}
  \item Item 1
  \item Item 2
  \end{enumerate}
\end{enumerate}

\begin{enumerate}
\item \begin{enumerate}
    \begin{myitem} Item 1 \end{myitem}  % This is the only difference
    \item Item 2
  \end{enumerate}
\end{enumerate}

% even this works!!!!
\begin{enumerate}
\item \begin{enumerate}
    \myitem Item 1 \endmyitem  % This is the only difference
    \item Item 2
  \end{enumerate}
\end{enumerate}

\end{document}

第一部分的输出是正确的,但我的详细myitem环境(应该只是复制\item)的输出缺少第二行的数字。编辑:知道为什么会这样吗?请注意,如果我在外部添加任何文本\item,一切都会按预期工作(内部枚举从新行开始)。

在我的实际用例中,我必须在每个项目的开始和结束时执行一些代码,这就是我采用环境的原因。

编辑:感谢您提出的其他解决方法。但我也非常想知道环境方法失败的原因。

编辑2:我发现我可以复制错误的行为。


\begin{enumerate}
\item \begin{enumerate}
    \begingroup \item test 1 \endgroup
    \item item 2
  \end{enumerate}
\end{enumerate}

因此,很明显,环境正在围绕 启动组,这\item就是问题所在。我想我可以按如下方式更改我的环境的定义:

\newenvironment{myitem}{\endgroup\item\begingroup}{}%

导致在外部创建组\item,但随后我收到错误

\begin{enumerate} on input line 15 ended by \end{myitem}.

答案1

描述

我使用了另一种方法来获得你想要的东西。

\itemBeginCode和中定义的代码在环境中的\itemEndCode每个之前和之后执行。\myitemmyenumerate

结果

在此处输入图片描述

代码

\documentclass{article}

\usepackage{etoolbox}

\newcommand{\itemBeginCode}{\emph{(start)}}
\newcommand{\itemEndCode}{\emph{(end)}}

\newtoggle{myfirstitem}
\newenvironment{myenumerate}{%
    \toggletrue{myfirstitem}%
    \begin{enumerate}%
}{%
    \itemEndCode% for the last item
    \end{enumerate}%
}

\newcommand{\myitem}{%
    \iftoggle{myfirstitem}{}{\itemEndCode}% if not the first item
    \item%
    \togglefalse{myfirstitem}%
    \itemBeginCode%
}

\begin{document}

\begin{enumerate}
\item
    \begin{myenumerate}
    \myitem Item 1
    \myitem Item 2
    \end{myenumerate}
\end{enumerate}

\end{document}

答案2

从我以前的一个问题中找到了一个解决方案问题。抱歉造成噪音。

我只需要像这样定义环境。

\makeatletter
\long\def\myitem{{\ifnum0=`}\fi\@myitem\@argend}%
\long\def\@myitem#1\@argend#2\end#3{%
\expandafter\ifstrequal\expandafter{#3}{myitem}%
{\ifnum0=`{\fi}\end{myitem}\@myrealitem{#1#2}}{\@myitem#1#2\end{#3}\@argend}}
\def\@myrealitem#1{\item #1}
\makeatother

相关内容