楼主: oliyiyi
20084 2

在 LaTeX 里定义一个类似 proof 的环境 [推广有奖]

版主

泰斗

0%

还不是VIP/贵宾

-

TA的文库  其他...

计量文库

威望
7
论坛币
271951 个
通用积分
31269.3721
学术水平
1435 点
热心指数
1554 点
信用等级
1345 点
经验
383775 点
帖子
9598
精华
66
在线时间
5470 小时
注册时间
2007-5-21
最后登录
2024-4-30

初级学术勋章 初级热心勋章 初级信用勋章 中级信用勋章 中级学术勋章 中级热心勋章 高级热心勋章 高级学术勋章 高级信用勋章 特级热心勋章 特级学术勋章 特级信用勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
美国数学协会(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}

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:LaTeX Late atex LAT ATE 美国 数学 元素

已有 1 人评分经验 论坛币 收起 理由
平军 + 10 + 10 精彩帖子

总评分: 经验 + 10  论坛币 + 10   查看全部评分

本帖被以下文库推荐

  • · LaTeX|主题: 77, 订阅: 25
缺少币币的网友请访问有奖回帖集合
https://bbs.pinggu.org/thread-3990750-1-1.html
沙发
oliyiyi 发表于 2014-12-7 21:17:15 |只看作者 |坛友微信交流群

缺少币币的网友请访问有奖回帖集合
https://bbs.pinggu.org/thread-3990750-1-1.html

使用道具

藤椅
oliyiyi 发表于 2014-12-7 21:17:27 |只看作者 |坛友微信交流群
选自:http://liam0205.me/2014/12/03/how-to-define-a-proof-like-environment/

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-2 02:41