# Proclaim command with multiple paragraphs

In page 131 of "TeX for the Impatient", it says the followings for proclaim command:

\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.


Maybe I'm not understanding these well, since when I wrote the following

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

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


I get an error from TeX. What is the correct usage of proclaim with multiple paragraphs?

-

\proclaim is defined as

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


So the "title" is delimited with a period and a space, and the content by a \par. If you'd like to have more than one paragraph inside the proclaim, you can use \endgraf like so:

\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


Note that the last empty line before \bye delimits the \proclaim.

-
Do you mean it is a mistake in this book? –  Z.H. Jun 10 '14 at 8:01
@Z.H. Looks to me like it is. –  morbusg Jun 10 '14 at 8:03

The definition of \proclaim is a typical example of Knuth's writing style. He rarely uses multiparagraphs statements, so the main argument of \proclaim is delimited by \par.

The macro has two arguments:

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


The first argument is delimited by ., so it is everything from \proclaim up to the first . that appears at the outer brace level. This is meant to be the statement's number. The second argument is delimited by \par, which means either an explicit \par command or an empty line, because this is converted to \par during tokenization.

Note that the macro is declared \outer, so it can appear neither in the replacement text of another macro nor in the argument to a \write command. Also the macro is not \long, so hiding a \par in a pair of braces as you tried is not allowed (as before, leaving an empty line is the same as typing \par).

One could ask what's the purpose of the conditional \removelastskip in the definition; probably it is there because a statement might end with an itemized list that the author could have defined with some vertical space at either end.

Is \proclaim good for anything? No. It's there just to show how a macro for theorem statements can be defined. The idea is that Plain TeX users will define their macros based on their own needs.

A mildly complex mathematical paper will most probably need multiparagraph statements and also macros for enumerated lists, with at least a rudimentary cross reference system.

A better definition would use a different delimiter than \par:

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


(note that I changed \sl into \it; I consider slanted type, albeit loved by Knuth, as not being a real advancement in the typographical craft).

With that redefinition you can type

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

What I say is not to be believed.
\endproclaim


Note also the “normal argument” status, which I prefer, for the header argument. It might also be as before with

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


and the input should be

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

What I say is not to be believed.
\endproclaim

-