Kommentare
- Ich habe dafür gestimmt, diese Frage zu schließen, weil @egreg hat lieferte eine kanonische Antwort auf die Frage ", die ursprünglich bei tex.sx " gestellt wurde.
- Okay, aber diese Frage wurde zuerst gefragt.
Antwort
Zu jedem Zeitpunkt der Verarbeitung befindet sich TeX in einem bestimmten Modus. Es gibt sechs Modi, die in drei Kategorien unterteilt sind:
- horizontaler Modus und eingeschränkter horizontaler Modus,
- vertikaler Modus und interner vertikaler Modus sowie
- Mathematik Modus und Anzeigemathematikmodus.
Wenn Sie keine Mathematik setzen, befindet sich TeX im horizontalen oder vertikalen Modus. Der horizontale Modus wird normalerweise zum Erstellen von Textzeilen verwendet. Der vertikale Modus wird normalerweise verwendet, um die Zeilen eines Absatzes übereinander zu stapeln.
\vskip
fügt einen Kleber in eine vertikale Liste der Zeilen ein. Daher unterbricht \vskip
den horizontalen Modus und wechselt in den vertikalen Modus.
\vspace
kann im horizontalen und vertikalen Modus arbeiten Modus. Im horizontalen Modus entspricht \vspace 1mm
\vadjust{\vskip 1mm \vskip 0pt}
und fügt nach der aktuellen Zeile ein Leerzeichen ein. Im vertikalen Modus entspricht \vspace 1mm
\vskip 1mm \vskip 0pt
\vskip 0pt
erforderlich, damit \removelastskip
Ihren vertikalen Raum nicht entfernen kann.
Vollständige Definition:
\vspace : -> \@ifstar \@vspacer \@vspace
Ohne *
case (\vspace 1mm
):
\@vspace: #1->\ifvmode \vskip #1 \vskip \z@skip \else \@bsphack \vadjust {\@restore par \vskip #1 \vskip \z@skip }\@esphack \fi
Hinweis \z@skip
gleich 0pt
, \@bsphack
wird benötigt, um nach dem Zeitraum großen horizontalen Platz zu sparen. \@esphack
wird benötigt, um Einstellungen für großen Speicherplatz zurückzugeben.
Mit *
case (\vspace* 1mm
):
\@vspacer:#1->\ifvmode \dimen@ \prevdepth \hrule \@height \z@ \nobreak \vskip #1 \v skip \z@skip \prevdepth \dimen@ \else \@bsphack \vadjust {\@restorepar \hrule @height \z@ \nobreak \vskip #1 \vskip \z@skip }\@esphack \fi
Kommentare
- Wenn sie also außerhalb eines Absatzes verwendet werden (dh im vertikalen Modus), dann wäre die Ausgabe genau gleich?
Antwort
\vspace
ist ein LaTeX-Befehl und \vskip
ist ein TeX-Befehl. Beide können in LaTeX verwendet werden. Wenn \vspace
in einem Absatz verwendet wird, wird nach der aktuellen Zeile ein Leerzeichen eingefügt. Wenn jedoch \vskip
innerhalb eines Absatzes verwendet wird, wird der Absatz beendet und das Leerzeichen sofort eingefügt.
Kommentare
- Warum startet
\vskip
eine neue Zeile? Ist dies ein Nebeneffekt dessen, was Charles als " vertikaler Modus bezeichnet? " - @Geoff:
\vskip
Starten Sie eine neue Zeile.vskip
ist ein vertikaler Sprung. Donald Knuth hat dies entschieden.
Antwort
Der Unterschied am Beispiel:
\documentclass[preview, border=7mm]{standalone} \usepackage{xcolor} \usepackage{blindtext} \begin{document} \textcolor{red}{Line with \texttt{vspace} :} \vspace{1cm} \blindtext \hrulefill \textcolor{red}{Line with \texttt{vskip} :} \vskip 1cm \blindtext \end{document}
Antwort
Genau wie Rob sagt; Um es neu zu formulieren, sollte \vskip
verwendet werden, wenn Sie sich im vertikalen Modus befinden oder mit der Einstellung beginnen möchten, und \vspace
ist innerhalb von a sinnvoll Absatz.
Die (an?) Implementierung von \vspace
wird in Eijkhout 1990, TUGboat 11 (4) erörtert ), S. 618 .