Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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?

share|improve this question

2 Answers 2

up vote 5 down vote accepted

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

share|improve this answer
    
Do you mean it is a mistake in this book? –  Z.H. Jun 10 at 8:01
    
@Z.H. Looks to me like it is. –  morbusg Jun 10 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
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.