\ vspace vs. \ vskip [duplikát] (Čeština)

Tato otázka již má odpovědi zde :

Komentáře

  • Hlasoval jsem pro uzavření této otázky, protože @egreg má poskytl kanonickou odpověď na " otázku původně položenou na adrese tex.sx ".
  • Dobře, ale tato otázka byl požádán jako první.

Odpověď

TeX je kdykoli ve svém zpracování v nějakém režimu. Existuje šest režimů rozdělených do tří kategorií:

  1. horizontální režim a omezený horizontální režim,
  2. vertikální režim a interní vertikální režim a
  3. matematika režim a režim zobrazení matematiky.

Pokud není sazba matematiky, TeX je v horizontálním nebo vertikálním režimu. Horizontální režim se obvykle používá k vytváření řádků textu; vertikální režim se obvykle používá ke skládání řádků odstavce na sebe.

\vskip vloží lepidlo do svislého seznamu řádků. Proto \vskip rozbije horizontální režim a přejde do vertikálního režimu.

\vspace může pracovat v horizontálním i vertikálním režimu režimu. V horizontálním režimu je \vspace 1mm ekvivalentní s \vadjust{\vskip 1mm \vskip 0pt} a za aktuální řádek vloží mezeru. Ve vertikálním režimu je \vspace 1mm ekvivalentní s \vskip 1mm \vskip 0pt

\vskip 0pt je potřeba, takže \removelastskip nemůže odstranit svislý prostor.

Úplná definice:

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

Bez * případu (\vspace 1mm):

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

Poznámka \z@skip rovnající se 0pt, \@bsphack je potřeba k uložení velkého vodorovného prostoru po období. \@esphack je potřeba k vrácení nastavení velkého prostoru.

V případě * (\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 

Komentáře

  • Takže pokud jsou použity mimo odstavec (tj. ve vertikálním režimu), pak by výstup byl úplně stejný?

Odpovědět

\vspace je příkaz LaTeX a \vskip je příkaz TeX. Oba lze použít v LaTeXu. Když je \vspace použit v odstavci, vloží mezeru za aktuální řádek. Pokud je ale \vskip použit v rámci odstavce, odstavec končí a vloží mezeru okamžitě.

Komentáře

  • Proč \vskip začíná nový řádek? Je to vedlejší účinek toho, co Charles označuje jako " vertikální režim? "
  • @Geoff: \vskip spustit nový řádek záměrně. vskip je vertikální přeskočení. Donald Knuth se tak rozhodl.

Odpověď

Rozdíl podle příkladu:

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

zde zadejte popis obrázku

Odpověď

Přesně tak, jak říká Rob; k přeformulování by měl být použit \vskip, když se nacházíte nebo chcete začít nastavovat vertikální režim a \vspace má smysl v rámci odstavec.

Implementace \vspace (an?) je popsána v Eijkhout 1990, TUGboat 11 (4 ), p618 .

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *