用多个段落宣告命令

用多个段落宣告命令

proclaim在“TeX for the Impatient”的第 131 页中,它对命令进行了如下说明:

\proclaim ⟨argument⟩.␣⟨general text⟩\par

This command ``proclaims'' a theorem, lemma, hypothesis, etc.
It sets <argument> in boldface type and the following paragraph in
italics. <argument> must be followed by a period and a space token,
which serve to set off <argument> from <general text>.
<general text> consists of the text up to the next paragraph
boundary, except that you can include multiple paragraphs by putting them
within braces and ending a paragraph after the closing right brace.

也许我理解得不太清楚,因为当我写下以下内容时

\proclaim Theorem 1.
{What I say is not to be believed.

What I say is not to be believed.}\par

我收到 TeX 错误。proclaim多个段落的正确用法是什么?

答案1

\proclaim定义为

\outer\def\proclaim #1. #2\par{\medbreak
  \noindent{\bf#1.\enspace}{\sl#2\par}%
  \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}

因此,“标题”以句号和空格分隔,内容以 分隔\par。如果您希望在声明中包含多个段落,可以\endgraf像这样使用:

\proclaim ⟨argument⟩.␣⟨general text⟩.
This command ``proclaims'' a theorem, lemma, hypothesis, etc.
It sets <argument> in boldface type and the following paragraph in
italics.\endgraf
<argument> must be followed by a period and a space token,
which serve to set off <argument> from <general text>.
<general text> consists of the text up to the next paragraph
boundary, except that you can include multiple paragraphs by putting them
within braces and ending a paragraph after the closing right brace.

\bye

请注意, 之前的最后一行空行\bye用于分隔\proclaim

答案2

的定义\proclaim是Knuth写作风格的典型例子。他很少使用多段落的陈述,因此的主要论点\proclaim被界定为\par

该宏有两个参数:

\outer\def\proclaim #1. #2\par{\medbreak
  \noindent{\bf#1.\enspace}{\sl#2\par}%
  \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}

第一个参数以 分隔.,因此它是从上到下括号级别出现的\proclaim第一个参数的所有内容。这表示语句的编号。第二个参数以 分隔,这意味着显式命令或空行,因为这在标记化过程中会转换为。.\par\par\par

请注意,宏声明为\outer,因此它既不能出现在另一个宏的替换文本中,也不能出现在\write命令的参数中。此外,宏不是\long,因此\par不允许像您尝试的那样将 隐藏在一对括号中(与之前一样,留下一个空行与输入 相同\par)。

有人可能会问定义中的条件的目的是什么\removelastskip;可能是因为一个语句可能以一个逐项列表结尾,作者可以在两端用一些垂直空间来定义它。

\proclaim什么用处吗?不。它只是用来展示如何定义定理语句的宏。其理念是让 Plain TeX 用户根据自己的需要定义宏。

一篇稍微复杂的数学论文很可能需要多段落语句以及用于枚举列表的宏,以及至少基本的交叉引用系统。

更好的定义将使用与以下不同的分隔符\par

\long\def\proclaim#1#2\endproclaim{\medbreak
  \noindent{\bf#1.\enspace}{\it\ignorespaces#2\par}%
  \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}

(请注意,我变成\sl\it;我认为倾斜字体,尽管 Knuth 很喜欢,但并不是印刷工艺的真正进步)。

通过重新定义,您可以输入

\proclaim{Theorem 1}
What I say is not to be believed.

What I say is not to be believed.
\endproclaim

还请注意,对于 header 参数,我更喜欢“正常参数”状态。它也可能像以前一样

\long\def\proclaim#1. #2\endproclaim{\medbreak
  \noindent{\bf#1.\enspace}{\it#2\par}%
  \ifdim\lastskip<\medskipamount \removelastskip\penalty55\medskip\fi}

输入应该是

\proclaim Theorem 1.
What I say is not to be believed.

What I say is not to be believed.
\endproclaim

相关内容