我正在尝试创建一个自定义的“证明”环境,其行为如下:
\begin{proof}\end{proof}
应该产生\textit{Proof.}
,而\begin{proof}{method}\end{proof}
应该产生\textit{Proof (method).}
。这是我现在所拥有的:
\documentclass[10pt]{article}
\usepackage{xifthen}
\newenvironment{proof}[1]
{\par\vspace{\baselineskip}\noindent\textit{Proof
{\ifthenelse
{\isempty{#1}}
{}
{(#1)}
}}}
\begin{document}
\begin{proof}{by contradiction}
1
\end{proof}
\begin{proof}
2
\end{proof}
\end{document}
由于某种原因,我无法输入#1
括号,因为它们在编译时总会消失。有什么想法吗?
答案1
可选参数通常以 引入[...]
,由于这是环境的可选参数,因此我认为使用该语法是有意义的。因此,这里有一个完全符合这一要求的版本:
\documentclass[10pt]{article}
\NewDocumentEnvironment{proof}{o}{
\par\vspace{\baselineskip}\noindent
\IfNoValueTF{#1}
{\textit{Proof}}
{\textit{Proof (#1)}}
}
{}
\begin{document}
\begin{proof}[by contradiction]
1
\end{proof}
\begin{proof}
2
\end{proof}
\end{document}
答案2
Alan Munn 已经抢先一步解决了这个问题,他可能有一个更好的解决方案。但由于我刚刚才了解到这一点,所以这里有一个替代方案,它使用环境包裹。
\documentclass[10pt]{article}
\usepackage{xifthen}
\usepackage{environ}
\NewEnviron{inner}[1][]{%
\par\vspace{\baselineskip}\noindent
\itshape Proof.
\ifthenelse
{\isempty{#1}}
{\BODY}
{(#1) \BODY}
}
\begin{document}
\begin{inner}[by contradiction]
1
\end{inner}
\begin{inner}
2
\end{inner}
\end{document}