The difference is in the time at which the ‘right hand side’ is evaluated.
Thus \let\foo\bar
defines \foo
to have the value that \bar
had at the point of definition. On the other hand, \def\foo{\bar}
in effect defines \foo
to have the value that \bar
has at the point of use.
Consider:
\def\bar{hello}
\let\fooi\bar
\def\fooii{\bar}
\fooi +\fooii
\def\bar{goodbye}
\fooi +\fooii
This produces
hello+hello
hello+goodbye
This is a simple process.
However it's also a subtle one, so it might be worth highlighting a few key points:
When TeX encounters control sequences such as \fooi
, it evaluates them; if these are macros (that is, they have been defined by \def
, or \let
equal to something which was defined by \def
), then the result is that they will expand to other tokens, which TeX will then examine in turn, and so on, recursively, until what's left is either ‘primitive’ control sequences or letters (I'm simplifying a little bit).
\fooi
expands directly to the characters hello
(because \bar
initially did, and \fooi
was defined to have the same value).
\fooii
, in contrast, expands to \bar
, which is then immediately reexamined and reexpanded. In the first case, \bar
expands to hello
and in the second case to goodbye
. The definition of \fooii
hasn't changed, but \bar
has been redefined in between.
Getting a clear idea of the process of this recursive expansion is very helpful when learning how to develop and debug TeX macros.
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.
Best Answer
At any point in its processing, TeX is in some mode. There are six modes, divided in three categories:
When not typesetting mathematics, TeX is in horizontal or vertical mode. Horizontal mode is typically used to make lines of text; vertical mode is typically used to stack the lines of a paragraph on top of each other.
\vskip
inserts a glue in a vertical list of the lines. Therefore\vskip
breaks the horizontal mode and goes to the vertical mode.\vspace
can work in horizontal mode and vertical mode. In horizontal mode\vspace 1mm
is equivalent to\vadjust{\vskip 1mm \vskip 0pt}
and inserts a space after the current line. In vertical mode\vspace 1mm
is equivalent to\vskip 1mm \vskip 0pt
\vskip 0pt
is needed so\removelastskip
can not remove your vertical space.Full definition:
Without
*
case (\vspace 1mm
):Note
\z@skip
equal to0pt
,\@bsphack
is needed to save big horizontal space after period.\@esphack
is needed to return big space settings.With
*
case (\vspace* 1mm
):