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