Commenti
- Ho votato per chiudere questa domanda perché @egreg ha ha fornito una risposta canonica per la " domanda originariamente posta su tex.sx ".
- Va bene, ma questa domanda è stato chiesto per primo.
Risposta
In qualsiasi momento della sua elaborazione, TeX è in qualche modalità. Sono disponibili sei modalità, suddivise in tre categorie:
- modalità orizzontale e modalità orizzontale limitata,
- modalità verticale e modalità verticale interna e
- matematica mode e modalità display math.
Quando non si impagina la matematica, TeX è in modalità orizzontale o verticale. La modalità orizzontale viene generalmente utilizzata per creare righe di testo; la modalità verticale è tipicamente usata per impilare le righe di un paragrafo una sopra laltra.
\vskip inserisce una colla in un elenco verticale di righe. Pertanto \vskip interrompe la modalità orizzontale e passa alla modalità verticale.
\vspace può funzionare in modalità orizzontale e verticale modalità. In modalità orizzontale \vspace 1mm è equivalente a \vadjust{\vskip 1mm \vskip 0pt} e inserisce uno spazio dopo la riga corrente. In modalità verticale \vspace 1mm è equivalente a \vskip 1mm \vskip 0pt
\vskip 0pt è necessario in modo che \removelastskip non possa rimuovere lo spazio verticale.
Definizione completa:
\vspace : -> \@ifstar \@vspacer \@vspace
Senza * case (\vspace 1mm):
\@vspace: #1->\ifvmode \vskip #1 \vskip \z@skip \else \@bsphack \vadjust {\@restore par \vskip #1 \vskip \z@skip }\@esphack \fi
Nota \z@skip uguale a 0pt, \@bsphack è necessario per risparmiare un grande spazio orizzontale dopo il punto. \@esphack è necessario per restituire le impostazioni di spazio grande.
Con * 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
Commenti
- Quindi, se vengono utilizzati al di fuori di un paragrafo (ovvero, in modalità verticale), loutput sarebbe esattamente lo stesso?
Answer
\vspace è un comando LaTeX e \vskip è un comando TeX. Entrambi possono essere usati in LaTeX. Quando \vspace viene utilizzato allinterno di un paragrafo, inserisce uno spazio dopo la riga corrente. Ma se \vskip viene utilizzato allinterno di un paragrafo, termina il paragrafo e inserisce lo spazio immediatamente.
Commenti
- Perché
\vskipinizia una nuova riga? È un effetto collaterale di ciò che Charles chiama " modalità verticale? " - @Geoff:
\vskipinizia una nuova riga in base alla progettazione.vskipè un salto verticale. Donald Knuth ha deciso così.
Risposta
La differenza per esempio:
\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}
Rispondi
Esattamente come dice Rob; per riformulare, \vskip dovrebbe essere utilizzato quando sei in, o desideri iniziare a impostare in, modalità verticale e \vspace ha senso allinterno di un paragrafo.
Limplementazione (an?) di \vspace è discussa in Eijkhout 1990, TUGboat 11 (4 ), p618 .