定义一个离开周围环境的环境

定义一个离开周围环境的环境

我想定义这样的环境:

\newenvironment{antiitemize}{\end{itemize}}{\begin{itemize}}

我之所以这样称呼它,antiitemize是因为我打算在环境中使用它itemize来暂时脱离列表,例如写一条实际上不属于列表的评论。例如,我想写

\documentclass{article}

\newenvironment{antiitemize}{\end{itemize}}{\begin{itemize}}

\parindent=0pt

\begin{document}

Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.

\begin{itemize}

\item Lorem ipsum dolor sit amet, consectetur adipiscing elit. 

\item Quisque ac porttitor lectus.

\begin{antiitemize}
Mauris a libero laoreet, iaculis arcu et, tincidunt quam.
\end{antiitemize}

\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.

\end{itemize}

Morbi nec rhoncus ante.

\end{document}

但是,这不管用。LaTeX 似乎不喜欢嵌套不良的环境。我找到了一种解决方法,即定义一对命令来手动启动和结束环境antiitemize,如下所示。

\documentclass{article}

\def\antiitemize{\end{itemize}}
\def\endantiitemize{\begin{itemize}}

\parindent=0pt

\begin{document}

Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.

\begin{itemize}

\item Lorem ipsum dolor sit amet, consectetur adipiscing elit. 

\item Quisque ac porttitor lectus.

\antiitemize
Mauris a libero laoreet, iaculis arcu et, tincidunt quam.
\endantiitemize

\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.

\end{itemize}

Morbi nec rhoncus ante.

\end{document}

这是可以容忍的,但我真的很想知道为什么我不能antiitemize使用来定义我的环境\newenvironment


编辑。为了回应我的问题收到的一些评论,以下是有关我提出这个问题的动机的几点说明。

  • cgnieder 指出\end{itemize}...\begin{itemize}会产生与 相同的效果\begin{antiitemize}...\end{antiitemize}。确实如此,但在我的用例中,这不是一种非常“语义化”的文档标记方式。在我的antiitemize环境中,应该将这些东西视为“列表中的中断”,而不是“结束一个列表并开始另一个列表”。

  • 我在最初的问题中没有把这一点说清楚,但我想我真正想要的答案是:为什么我的antiitemize环境被破坏了吗?

答案1

您已经可以很轻松地使用该enumitem包来实现这一点:它有一个resume*选项,可以使用相同类型和级别的前一个列表的参数,并且对于enumerate,从前一个列表离开的位置启动计数器。演示:

 \documentclass{article}
\usepackage[utf8]{inputenc} 
\usepackage{amssymb} 
\usepackage[svgnames]{xcolor} 
\usepackage{enumitem}

\parindent=0pt

\begin{document}

Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.

\begin{itemize}[label =\color{VioletRed}$ \lozenge $]

\item Lorem ipsum dolor sit amet, consectetur adipiscing elit.

\item Quisque ac porttitor lectus.

\end{itemize}
Mauris a libero laoreet, iaculis arcu et, tincidunt quam.

\begin{itemize}[resume*]

\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.

\end{itemize}

Morbi nec rhoncus ante.

\begin{itemize}

\item Lorem ipsum dolor sit amet, consectetur adipiscing elit.

\item Quisque ac porttitor lectus.

\end{itemize}

\end{document} 

在此处输入图片描述

答案2

您可以使用\antiitemize\endantiitemize代替\begin{antiitemize}\end{antiitemize},并保留环境定义。

\documentclass{article}

\newenvironment{antiitemize}{\end{itemize}}{\begin{itemize}}

\parindent=0pt

\begin{document}

Donec aliquam quam sed enim bibendum, quis ultrices felis porttitor.

\begin{itemize}

\item Lorem ipsum dolor sit amet, consectetur adipiscing elit. 

\item Quisque ac porttitor lectus.

\antiitemize

Mauris a libero laoreet, iaculis arcu et, tincidunt quam.

\endantiitemize

\item Suspendisse auctor leo ut felis lobortis commodo vel quis diam.

\end{itemize}

Morbi nec rhoncus ante.

\end{document}

在此处输入图片描述

查看结果这里

相关内容