美国数学协会(AMS)是 TeX 发展中的一支重要的力量。AMS 定义的 proof 环境非常好用,能在证明结束的末尾,自动添加一个「证毕」的符号。

有时我们需要类似的环境,比如这里的题主希望用两个环境区分「证明」和「解答」,并且都需要自动添加结束符号。这时我们可以仿照 amsthm 宏包的做法,自己定义一套环境。

proof 环境的原始定义是这样的:

\newenvironment{proof}[1][\proofname]{\par
  \pushQED{\qed}%
  \normalfont \topsep6\p@\@plus6\p@\relax
  \trivlist
  \item[\hskip\labelsep
        \itshape
    #1\@addpunct{.}]\ignorespaces
}{\popQED\endtrivlist\@endpefalse}
 

这里 \pushQED{\qed} 把 \qed 压入了 QED 这个堆栈,然后在环境结束的地方,通过 \popQED把压入堆栈的最后一个元素弹出来。这样的设计是非常合理的。比如,如果在证明的过程中,需要分别证明两个小的情形,这样就能按照次序依次给出证明的结束符号。此外,证明开始的标题通过 \proofname 来控制。

通过这些分析,我们知道定义一个新的环境,我们需要从两个方面入手。其一是 \proofname的位置需要改变,其二是压入堆栈的内容需要更改。

下面的代码我们定义了一个名为 \fooname 的宏,来替代 \proofname

\providecommand{\fooname}{Foo}
下面的代码我们定义了名为 \bxz 的宏,来替换原本压入堆栈的 \qed。其中 \bxz 具体的符号内容用 \bxzsymbol 这个宏来控制。
\DeclareRobustCommand{\bxz}{\ifmmode \mathbxz
  \else
    \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill
    \quad\hbox{\bxzsymbol}%
  \fi
}
\newcommand{\mathbxz}{\quad\hbox{\bxzsymbol}}
\providecommand{\bxzsymbol}{\fbox{\footnotesize B.X.Z}}
最后,重新定义一个名为 foo 的环境。
\newenvironment{foo}[1][\fooname]{\par
  \pushQED{\bxz}%
  \normalfont \topsep6\p@\@plus6\p@\relax
  \trivlist
  \item[\hskip\labelsep
        \itshape
    #1\@addpunct{.}]\ignorespaces
}{\popQED\endtrivlist\@endpefalse}
完整的测试代码如下:
\documentclass{article}
\usepackage{amsthm}
\makeatletter
\DeclareRobustCommand{\bxz}{\ifmmode \mathbxz
  \else
    \leavevmode\unskip\penalty9999 \hbox{}\nobreak\hfill
    \quad\hbox{\bxzsymbol}%
  \fi
}
\newcommand{\mathbxz}{\quad\hbox{\bxzsymbol}}
\newenvironment{foo}[1][\fooname]{\par
  \pushQED{\bxz}%
  \normalfont \topsep6\p@\@plus6\p@\relax
  \trivlist
  \item[\hskip\labelsep
        \itshape
    #1\@addpunct{.}]\ignorespaces
}{\popQED\endtrivlist\@endpefalse}
\providecommand{\bxzsymbol}{\fbox{\footnotesize B.X.Z}}
\providecommand{\fooname}{Foo}
\makeatother
\begin{document}
\begin{proof}
\begin{foo}
  The foo goes here.
\end{foo}
\begin{foo}
  \[
    E = mc^{2}.\qedhere
  \]
\end{foo}
This is the conclusion that we need.
\end{proof}
\end{document}
redefine-proof 选自:http://liam0205.me/2014/12/03/how-to-define-a-proof-like-environment/

点赞(2)

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部