\ vspace vs. \ vskip [duplicate] (Italiano)

Questa domanda ha già una risposta qui :

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:

  1. modalità orizzontale e modalità orizzontale limitata,
  2. modalità verticale e modalità verticale interna e
  3. 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é \vskip inizia una nuova riga? È un effetto collaterale di ciò che Charles chiama " modalità verticale? "
  • @Geoff: \vskip inizia 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} 

inserisci qui la descrizione dellimmagine

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 .

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *