我希望创建一个自定义证明环境,其中除了 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
,以避免在文档中使用并发生冲突。)