我有一个定理,它列出了一堆属性,然后我逐一证明它们。由于证明很长,所以当每行都由环境自动缩进时,看起来很奇怪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
命令。环境的变化是本地的,因为它们只会在组内传递。BeforBeginEnvironment
etoolbox
enumerate
proof
为了得到结果,您需要以下设置:
\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}