\ vspace vs. \ vskip [duplizieren]

Diese Frage hat hier bereits Antworten :

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:

  1. horizontaler Modus und eingeschränkter horizontaler Modus,
  2. vertikaler Modus und interner vertikaler Modus sowie
  3. 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} 

Geben Sie hier die Bildbeschreibung ein

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 .

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.