Работа в системе LaTeX

       

Параметры со значением длины


Наряду со счетчиками — переменными с целочисленными значениями, — при создании собственных макроопределений возникает нужда и в переменных, значениями которых являются длины. Например, в предыдущем разделе мы, разрабатывая команду \razdel, в явном виде задали промежуток между заголовком раздела и остальным текстом. Если этот промежуток нам почему-либо захочется изменить, то придется снова залезать в определение команды \razdel. Было бы удобнее, если бы в нашем распоряжении был параметр под названием, скажем, \otstup, так что можно было бы в определении команды \razdel написать

\vspace{\otstup}

и потом отдельно написать, допустим,

\otstup=1cm plus 3mm minus .5mm

Правда, в богатом наборе TeX'овских и LaTeX'овских параметров требуемого нам параметра \otstup нет, но это не страшно, поскольку его можно создать. Для этого используется команда \newlength:

\newlength{\otstup}

После того, как вы (допустим, в преамбуле) дали эту команду, будет определен новый параметр со значением длины; его можно будет обычным образом использовать в аргументах команд наподобие \vspace, и ему можно будет обычным образом присваивать значения.

Теперь — точные правила. Команда \newlength имеет один обязательный аргумент — имя команды, обозначающей определяемый вами параметр. Это имя должно подчиняться обычным правилам для TeX'овских команд (backslash, после которого следует либо одна не-буква, либо последовательность букв). Если это имя уже занято, LaTeX выдаст сообщение об ошибке. Определение нового параметра, совершаемое командой \newlength, является "глобальным": даже если эта команда была дана внутри группы, TeX будет помнить о существовании этого параметра и по выходе из группы. По этой причине разумное место для команды \newlength — преамбула.

Определенный нами параметр со значением длины приобретает такой же статус, как уже существующие TeX'овские и LaTeX'овские параметры (\parindent, \textwidth и другие). Рассмотрим, что можно делать с этими параметрами.

Во-первых, параметрам со значением длины можно присваивать значения.
Делается это точно так же, как это объяснялось ранее на примере параметра \parindent: для присваивания значения надо написать имя параметра, знак равенства, а после знака равенства — величину присваиваемой длины. Пробелы после указания единицы длины TeX'ом игнорируются (скорее всего, вы будете присваивать значения параметрам в преамбуле документа или между абзацами, где лишние пробелы никого не волнуют). Длина должна быть выражена в единицах, воспринимаемых TeX'ом. Даже если вы присваиваете нулевую длину, какая-то единица длины должна быть явно указана (например, 0pt). Кроме того, можно воспользоваться LaTeX'овской командой \setlength, имеющей два обязательных аргумента: первый — имя параметра, второй — значение длины, присваиваемое этому параметру. Таким образом, команды
\parindent=1.5em и
\setlength{\parindent}{1.5em} равносильны. Наконец, присваивания, сделанные внутри группы, забываются по выходе из этой группы.
В предыдущем абзаце мы умолчали об одной возможной неприятности. Дело в том, что если после команды присваивания, не использующей \setlength, следует (пусть даже после пробела) слово plus или minus, то TeX, скорее всего, выдаст сообщение об ошибке, поскольку решит, что длина должна иметь, помимо " естественного размера", еще и plus- или minus-компоненту. Если вы пишете текст на русском языке, вероятность такого стечения обстоятельств ничтожна, но тем не менее забывать о такой опасности не следует, особенно если команда присваивания входит в макроопределение: вы же не знаете заранее, в какое место может попасть новый макрос. Чтобы застраховаться от этой неприятности раз и навсегда, пользуйтесь командой \setlength, хоть это и длиннее.
Параметры со значением длины можно использовать всюду, где в аргументе LaTeX'овской команды требуется указать размер. Пусть, например, в преамбуле документа написано
\newlength{\primer} Тогда посмотрите на следующий пример:

\primer=10mm 9\hspace{\primer}9 {\primer=20mm 8\hspace{\primer}8} 9\hspace{\primer}9 Обратите внимание, что, если присваивание параметру нового значения происходило внутри группы, то по выходе из группы новое значение забывается, а прежнее — восстанавливается.


Параметры со значением длины можно указывать с коэффициентом - положительной или отрицательной десятичной дробью (можно использовать как десятичную точку, так и десятичную запятую). Например, если значение параметра \primer равно
, то команда \hspace{2.71\primer} сделает пробел длиной
.
Параметры со значением длины (возможно, с числовыми коэффициентами) могут также стоять в правой части оператора присваивания (или во втором аргументе команды \setlength):
\primer=1.45\parindent \setlength{\primer}{.45\tabcolsep} Можно также прибавлять длину к значению параметра: если значение параметра \abcd равно
, то после выполнения команды
\addtolength{\abcd}{"$y$\verb"} где
- длина, значение параметра "\abcd" станет равно
. В качестве
в этой команде может использоваться как явно указанная длина (например, 1.2in), так и параметр со значением длины (возможно, с числовым коэффициентом). Наконец, LaTeX предоставляет полезную команду
\settowidth{"\textit{параметр}\verb"}{"\textit{текст}\verb"} которая присваивает параметру значение, равное ширине текста. Вот пример:
\settowidth{\primer}{\Large слово } {\Large слово }слово \hspace{\primer}слово (обратите внимание, что у нас получилось выравнивание без помощи {tabbing} или {tabular}).
Существуют также команды \settoheight и \settodepth, аналогичные \settowidth. Команда \settoheight присваивает параметру значение, равное максимальному расстоянию, на которое текст возвышается над строкой (точнее, над ее базисной линией). \settodepth присваивает параметру значение, равное максимальному расстоянию, на которое текст опускается ниже базисной линии.
Ранее у нас шла речь о том, что некоторые используемые в TeX'е длины могут обладать растяжимостью или сжимаемостью. Параметрам, созданным с помощью команды \newlength, также можно присваивать значения, содержащие plus и/или minus -компоненту. Если, например, мы хотим, чтобы параметр \primer имел естественный размер
, растяжимость
и сжимаемость в один пункт, то можно написать так:
\setlength{\primer}{2cm plus 4mm minus 1pt}

Содержание раздела