Spec-Zone.ru › LaTeX

Длины

Длина — это мера расстояния. Многие команды LaTeX принимают длину в качестве аргумента.

Длины бывают двух типов. Абсолютная длина, например 10pt, не содержит plus или minus компоненты. (В Plain TeX это называется dimen.) Переменная длина (то, что в Plain TeX называется skip или glue), например, с 1cm plus0.05cm minus0.01cm, может содержать одну или обе эти компоненты. В этой переменной длине 1cm — это естественная длина, а две другие, plus и minus компоненты, позволяют TeX растягивать или сжимать длину для оптимизации размещения.

Ниже приведены примеры этих двух команд.

% make a black bar 10pt tall and #1 wide
\newcommand{\blackbar}[1]{\rule{#1}{10pt}}

% Make a box around #2 that is #1 wide (excluding the border)
\newcommand{\showhbox}[2]{%
  \fboxsep=0pt\fbox{\hbox to #1{#2}}} 

В этом примере эти команды используются для отображения черной полосы длиной 100 пунктов между 'XXX' и 'YYY'. Эта длина является абсолютной.

XXX\showhbox{100pt}{\blackbar{100pt}}YYY

Что касается переменных длин, сжатие проще: с 1cm minus 0.05cm, естественная длина составляет 1 см, но TeX может сжать ее до 0,95 см. Дальше TeX отказывается сжимать больше. Таким образом, в первом примере всё в порядке, создаётся пробел в 98 пунктов между двумя полосами.

XXX\showhbox{300pt}{%
  \blackbar{101pt}\hspace{100pt minus 2pt}\blackbar{101pt}}YYY

XXX\showhbox{300pt}{%
  \blackbar{105pt}\hspace{100pt minus 1pt}\blackbar{105pt}}YYY

Но во втором случае появляется предупреждение вроде 'Overfull \hbox (1.0pt too wide) detected at line 17'. В выводе первая 'Y' перезаписывается концом черной полосы, так как материал рамки шире, чем выделенные 300 пунктов, поскольку TeX отказался сжимать общий размер меньше 309 пунктов.

Растяжение аналогично сжатию, за исключением того, что если TeX попросят растянуть за заданный предел, он это сделает. В первом случае всё в порядке, создаётся пробел в 110 пунктов между полосами.

XXX\showhbox{300pt}{%
  \blackbar{95pt}\hspace{100pt plus 10pt}\blackbar{95pt}}YYY

XXX\showhbox{300pt}{%
  \blackbar{95pt}\hspace{100pt plus 1pt}\blackbar{95pt}}YYY

Во втором случае TeX требует растяжения на 10 пунктов, а указано только 1 пункт. TeX растягивает пространство до необходимого размера, но выдаёт предупреждение типа 'Underfull \hbox (badness 10000) detected at line 22'. (Мы не будем рассматривать badness.)

Можно использовать и растяжение, и сжатие в одной длине, как в 1ex plus 0.05ex minus 0.02ex.

Если TeX устанавливает две или более переменных длины, он распределяет растяжение или сжатие пропорционально.

XXX\showhbox{300pt}{%
  \blackbar{100pt}%  left
  \hspace{0pt plus 50pt}\blackbar{80pt}\hspace{0pt plus 10pt}%  middle
  \blackbar{100pt}}YYY  % right

Левая и правая полосы занимают по 100 пунктов, поэтому для средней полосы требуется ещё 100. Средняя полоса имеет длину 80 пунктов, поэтому обе \hspace должны растянуться на 20 пунктов. Поскольку две plus 50pt и plus 10pt, TeX получает 5/6 растяжения от первого пробела и 1/6 от второго.

Компонент plus или minus переменной длины может содержать компонент fill, как в 1in plus2fill. Это даёт длине бесконечную растяжимость или сжимаемость, так что TeX может установить её на любое расстояние. Здесь две фигуры будут одинаково равномерно распределены по странице.

\begin{minipage}{\linewidth}
  \hspace{0pt plus 1fill}\includegraphics{godel.png}%
  \hspace{0pt plus 1fill}\includegraphics{einstein.png}%
  \hspace{0pt plus 1fill}
\end{minipage}

TeX имеет три уровня бесконечности для компонентов glue: fil, fill, и filll. Более поздние более бесконечные, чем ранние. Обычно авторы документов используют только средний (см. \hfill и см. \vfill).

Умножение переменной длины на число превращает её в абсолютную длину, так что после \setlength{\ylength}{1in plus 0.2in} и \setlength{\zlength}{3\ylength} значение \zlength равно 3in.

  • Единицы длины
  • \setlength
  • \addtolength
  • \settodepth
  • \settoheight
  • \settowidth
  • \stretch
  • Выражения

© 2007–2018 Karl Berry
Public Domain Software
http://latexref.xyz/Lengths.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API