[Tex/LaTex] the difference between \vskip and \vspace

macrosspacing

I found myself writing:

\vspace 1 \baselineskip

and then when it's not compiling changing without thinking to:

\vskip 1 \baselineskip

but what is the difference? Perhaps knowing this will make me write the right one from the start in the future…

Best Answer

The syntax

\vspace 1\baselineskip

is incorrect, as \vspace (or, more precisely, the internal version \@vspace) is a command that takes one argument, so this would be equivalent to

\vspace{1}\baselineskip

which raises an error. However, also the two calls

\vspace{1\baselineskip}
\vskip 1\baselineskip

are not equivalent. The former will not force end-of-paragraph, if given in LR-mode (using LaTeX parlance; horizontal mode in TeX parlance), adding the stated vertical spacing under the line in which it appears in the typeset document. With \vskip, which is a primitive TeX command, the current paragraph will be terminated.

With \vspace you have also the *-version, providing a vertical space that won't disappear at a page break; spacing inserted with \vskip will always disappear at a page break.

In general it's best to issue \vspace between paragraphs, but the "in-paragraph" feature may come up handy in some cases.

Lastly,

\vskip 1\baselineskip
Plus one

will give some surprises to those who are not accustomed with Plain TeX lingo.

Note for the curious: \vglue 1\baselineskip ends the paragraph and produces spacing that won't disappear at a page break. It's not documented in the LaTeX manuals, and it's good it isn't.