带有括号的可选参数的自定义环境

带有括号的可选参数的自定义环境

我正在尝试创建一个自定义的“证明”环境,其行为如下:

\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}

在此处输入图片描述

相关内容