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í:
- horizontální režim a omezený horizontální režim,
- vertikální režim a interní vertikální režim a
- 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č
\vskipzačíná nový řádek? Je to vedlejší účinek toho, co Charles označuje jako " vertikální režim? " - @Geoff:
\vskipspustit nový řádek záměrně.vskipje 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}
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 .