\ vspace vs. \ vskip [duplikat]

Dette spørgsmål har allerede svar her :

Kommentarer

  • Jeg stemte for at lukke dette spørgsmål, fordi @egreg har leverede et kanonisk svar på " -spørgsmålet, der oprindeligt blev stillet på tex.sx ".
  • Okay, men dette spørgsmål blev først spurgt.

Svar

På et hvilket som helst tidspunkt i behandlingen er TeX i en eller anden tilstand. Der er seks tilstande, opdelt i tre kategorier:

  1. vandret tilstand og begrænset vandret tilstand,
  2. lodret tilstand og intern lodret tilstand og
  3. matematik tilstand og vis matematisk tilstand.

Når matematik ikke indstilles, er TeX i vandret eller lodret tilstand. Vandret tilstand bruges typisk til at lave tekstlinjer; lodret tilstand bruges typisk til at stable linjerne i et afsnit oven på hinanden.

\vskip indsætter en lim i en lodret liste over linjerne. Derfor bryder \vskip den vandrette tilstand og går til den lodrette tilstand.

\vspace kan arbejde i vandret tilstand og lodret mode. I vandret tilstand svarer \vspace 1mm til \vadjust{\vskip 1mm \vskip 0pt} og indsætter et mellemrum efter den aktuelle linje. I lodret tilstand svarer \vspace 1mm til \vskip 1mm \vskip 0pt

\vskip 0pt nødvendigt så \removelastskip ikke kan fjerne dit lodrette mellemrum.

Fuld definition:

\vspace : -> \@ifstar \@vspacer \@vspace 

Uden * sag (\vspace 1mm):

\@vspace: #1->\ifvmode \vskip #1 \vskip \z@skip \else \@bsphack \vadjust {\@restore par \vskip #1 \vskip \z@skip }\@esphack \fi 

Bemærk \z@skip svarende til 0pt, \@bsphack er nødvendig for at spare stort vandret rum efter periode. \@esphack er nødvendig for at returnere store pladsindstillinger.

Med * sag (\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 

Kommentarer

  • Så hvis de bruges uden for et afsnit (dvs. i lodret tilstand), så ville output være nøjagtigt det samme?

Svar

\vspace er en LaTeX-kommando, og \vskip er en TeX-kommando. Begge kan bruges i LaTeX. Når \vspace bruges i et afsnit, indsættes det mellemrum efter den aktuelle linje. Men hvis \vskip bruges inden for et afsnit, slutter det afsnittet og indsætter pladsen med det samme.

Kommentarer

  • Hvorfor starter \vskip en ny linje? Er dette en bivirkning af det, Charles henviser til som " lodret tilstand? "
  • @Geoff: \vskip start en ny linje efter design. vskip er et lodret spring. Donald Knuth besluttede det.

Svar

Forskellen ved eksempel:

\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} 

indtast billedebeskrivelse her

Svar

Præcis som Rob siger; for at omformulere, skal \vskip bruges, når du er i eller ønsker at begynde at indstille i lodret tilstand, og \vspace giver mening inden for en afsnit.

Implementeringen af (en?) af \vspace diskuteres i Eijkhout 1990, TUGboat 11 (4 ), s.618 .

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *