\enddef 中带有参数的环境定义

\enddef 中带有参数的环境定义

我希望创建一个自定义证明环境,其中除了 qed 符号外,还提到了被证明的主张是什么。我认为以下方法可行:

\newenvironment{myproof}[1]%
{\vspace{1ex}\noindent{\em Pf.}\hspace{0.5em}}%
{\hfill{\tiny \qed (#1)}\vspace{1ex}}

我以为\begin{myproof}{Claim 42} ..\end{myproof}会起作用,但实际上没有。经过一番谷歌搜索,我发现这是因为参数没有传递给\endmyproof

有办法解决这个问题吗?或者这只是 TeX 质量不好?

附言:顺便说一下,我当时正在写一个证明,里面有一个小声明。声明中的 QED 有点误导人,让人以为定理的证明已经完成。所以这似乎是一件很自然的事情。

答案1

\newenvironment{myproof}后台命令实际上定义了两个宏:和\myproof\endmyproof它们将被\begin和命令调用来完成工作。顺便说一下和的工作\end原理,只有可以向底层宏传递任何参数,因此只为定义了参数。\begin\end\begin\newenvironment\myproof

\myproof您可以通过在中定义一个临时宏并在中使用其值来解决此问题\endmyproof

\newenvironment{myproof}[1]%
{\vspace{1ex}\noindent{\em Pf.}\hspace{0.5em}\def\myproofname{#1}}%
{\hfill{\tiny \qed (\myproofname)}\vspace{1ex}}

(如果将此环境定义放在包文件中,则可以将此临时宏命名为\myproof@name,以避免在文档中使用并发生冲突。)

相关内容