替代枚举环境

替代枚举环境

我有一个定理,它列出了一堆属性,然后我逐一证明它们。由于证明很长,所以当每行都由环境自动缩进时,看起来很奇怪enumerate

是否可以定义一个新的环境,称之为enumproof,它与环境完全相同enumerate,但是没有缩进

额外挑战:是否可以重新定义enumerate环境,以便它知道何时在环境内部proof(从amsthm包中) - 在这种情况下,它会自动切换为像enumproof环境一样运行(意味着没有缩进)?

\documentclass{article}

\usepackage{amsthm}
\usepackage{enumitem}

\begin{document}

\noindent I want this enumeration to look normal:
\begin{enumerate}
\item Hello
\item to
\item you
\end{enumerate}

\begin{proof}
But I want this enumeration to have no extra indentation:
\begin{enumerate}
\item Hello
\item to
\item you
\end{enumerate}
\end{proof}

\end{document}

答案1

奖励可以通过检查命令来完成。因此,我使用提供的\@currenvir命令。环境的变化是本地的,因为它们只会在组内传递。BeforBeginEnvironmentetoolboxenumerateproof

为了得到结果,您需要以下设置:

\setlist[enumerate]{leftmargin=0pt,itemindent=*,listparindent=\parindent,parsep=0pt}

这个例子:

\documentclass{article}
\usepackage{showframe}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{kantlipsum}
\usepackage{etoolbox}
\makeatletter
\BeforeBeginEnvironment{enumerate}{%
   \def\@tempa{proof}%
   \ifx\@currenvir\@tempa
     \setlist[enumerate]{leftmargin=0pt,itemindent=*,listparindent=\parindent,parsep=0pt}%
   \fi}  
\makeatother
\begin{document}

\noindent I want this enumeration to look normal:
\begin{enumerate}
\item Hello
\item to
\item you
\end{enumerate}

\begin{proof}
But I want this enumeration to have no extra indentation:
\begin{enumerate}
\item Hello \kant[1]\kant[2]
\item to
\item you
\end{enumerate}
\end{proof}


\begin{enumerate}
\item Hello
\item to
\item you
\end{enumerate}
\end{document}

代码输出

相关内容