我正在使用一个我尚未开发的定制文档类。作为此类的一部分,环境proof
定义如下:
\newenvironment{proof}{%
\par\addvspace{12pt plus3pt minus3pt}\global\logotrue%
\noindent{\bf Proof.\hskip.5em}\ignorespaces}{%
\par\iflogo\vskip-\lastskip
\vskip-\baselineskip\prbox\par
\addvspace{12pt plus3pt minus3pt}\fi}
有几件事我不确定我是否理解。除此之外,我甚至不确定我是否理解重新定义环境的必要性proof
(也许在创建此模板时本机环境还不存在?)。
无论如何,我的问题是关于定义中的第二行,以 开头\par...
。这似乎打破了一行并添加了垂直空间;但是,当我proof
在 之后启动环境时subsection
,这会在小节标题和环境的开始之间创建一个相当大的空间proof
。
我尝试删除该行,问题得以解决。但是,我不确定该行的意义何在,并且希望避免在其他情况下出现任何意外后果proof
。
这样做的意义何在\par\addvspace{12pt plus3pt minus3pt}\global\logotrue
?是否有其他方法可以避免我所概述的问题?
答案1
假设您的文档类具有以下几行(以显示比您所展示的更多的定义)
\newif\iflogo
\def\prbox{\hbox to \hsize{\hfill\fboxsep0pt\fbox{\phantom{\vrule width5pt height5pt depth0pt}}}\global\logofalse}
%
\newenvironment{proof}{%
\par\addvspace{12pt plus3pt minus3pt}\global\logotrue%
\noindent{\bf Proof:\hskip.5em}\ignorespaces}{%
\par\iflogo\vskip-\lastskip
\vskip-\baselineskip\prbox\par
\addvspace{12pt plus3pt minus3pt}\fi}
我不会告诉你什么要做的,而是告诉你代码的作用。
\newif\iflogo
定义一个新的布尔标志。
\def\prbox{\hbox to \hsize{\hfill\fboxsep0pt\fbox{\phantom{\vrule width5pt height5pt depth0pt}}}\global\logofalse}
定义\prbox
命令。它具有以下组件(在这种情况下向后排列,因为这样更方便)
- 最后它将
\global\logoflase
先前定义的布尔标志设置为 false - 绘制一个 5pt x 5pt 大小的隐藏矩形 ( )
\fbox{...}
周围的带框框。带框框没有填充 ( )。实际上,它绘制了一个 5pt x 5pt 大小的开放正方形\phantom
\vrule
\fboxsep0pt
\hfill
在盒子前增加了空间,因此盒子与右齐平。
所以总的来说,这构成了一个命令,可用于在证明末尾打印墓碑符号。
\newenvironment{proof}...
开始定义证明环境。请记住,两个参数是开始之前发生的事情和结束之后发生的事情。
{%
\par\addvspace{12pt plus3pt minus3pt}\global\logotrue%
\noindent{\bf Proof:\hskip.5em}\ignorespaces}
开始一个新段落。将垂直空间增加(如果必要,因为之前的材料可能已经添加了一些垂直空间)到之前的 12pts(带有一些粘连)。
将\global\logotrue
布尔标志设置为 true,即重要的当涉及到定义的第二部分时。然后它Proof
以适当的间距打印单词。
{%
\par\iflogo\vskip-\lastskip
\vskip-\baselineskip\prbox\par
\addvspace{12pt plus3pt minus3pt}\fi}
用 开始一个新段落\par
。然后\iflogo
开始执行,如果布尔标志已设置为真(就像在校样环境的开头一样),它将首先取消所有最近添加的垂直空格(有效地将光标移回到打印材料的最后一行)。然后\prbox
打印墓碑,以便它显示在最后一行打印的右侧。然后它再次结束段落并将垂直空间增加到 12pt,以便开头和结尾具有对称间距。