Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 45
Текст из файла (страница 45)
Их ширина равна ширине окружающеготекста, а сами боксы «плавают», т. е. могут переходить в такое место печатногодокумента, где бы они не выходили за нижнюю или верхнюю границу страницы. Однако LATEX позволяет также формировать парбоксы заданной ширины ивставлять их в заданной точке текста при помощи команды \parbox:\parbox[vpos][height][inner-vpos]{width}{text}Она обычно используется для того, чтобы вставить один или несколько абзацевв рисунок или таблицу. LATEX форматирует text в текстовой моде в виде последовательности строк ширины width. Аналогично случаю строковых боксов, команды \height, \depth, \totalheight и \width могут использоваться в аргументеheight, где они обозначают естественные размеры бокса.Опция vpos конкретизирует способ позиционирования бокса по вертикали относительно текущей строки:2179.2.
Текстовые боксыt — базисная линия верхней строки в боксе выравнивается по базисной линиитекущей строки;c — центр бокса выравнивается по центру текущей строки (используется поумолчанию);b — базисная линия нижней строки в боксе выравнивается по базисной линиитекущей строки.Опция inner-vpos действует как вертикальный эквивалент аргумента vpos вкомандах строковых боксов типа \makebox, фиксируя позиционирование содержимого text внутри бокса.
Опция inner-vpos может принимать одно из четырёхзначений t, b, c или s, соответственно означающих выравнивание вверх, вниз,по центру бокса или растяжение на его полную высоту за счёт изменения растяжимых вертикальных длин (если таковые имеются). Когда опция inner-vpos неуказана, LATEX приписывает ей то же значение, которое имеет опция vpos.Перейдём к примерам. В первом из них в одной строке создаются два парбоксас опциями позиционирования t и b:\parbox[t]{3.5cm}{Левый бокс расположен ниже строки.}\ Это текущая строка. \\parbox[b]{3.5cm}{Правый бокс расположен выше строки.}В печатном документе эти боксы выравниваются соответственно по первой ипоследней строкам:←−3,5 см−→Правый бокс распоЛевый бокс располо- Это текущая строка.
ложен выше строки.жен ниже строки.←−3,5 см−→Внутри парбокса, образуемого командой \parbox, абзацный отступ отсутствует, так как его длина \parindent (раздел 17.2) по умолчанию там равна нулю.Однако значение \parindent можно изменить при помощи команды \setlength(раздел 2.10).В узких парбоксах могут образоваться большие пробелы между словами, поскольку бывает трудно найти подходящее место для переноса слов по слогам.В этом случае часто отменяют режим выравнивания строк по правой границе(раздел 4.4).Пример: \\parbox[t]{1.3in}{\raggedrightв этом парбоксе использовановыравнивание текста влево.}Пример: в этом парбоксеиспользовановыравниваниетекста влево.Усложним пример, использовав весь набор опций, чтобы сделать бокс с высотойв 40% ширины, растянув текст в нём на полную высоту.Пример: \Пример:\fbox{\parbox[t][.4\width][s]{1.3in}{\raggedright этот парбокс\smallskip растянут на полную высоту.}}этот парбоксрастянут на полнуювысоту.218Глава 9.
Боксы и что там внутриЗдесь растяжимую длину вносит команда \smallskip; она срабатывает послезавершения текущей строки. Для наглядности парбокс обведён рамкой.Обычно команда \parbox используется для создания боксов с небольшимифрагментами текста.
Она имеет ограниченную область применимости, так каквнутри формируемого ею парбокса нельзя использовать процедуры составлениясписков (глава 5), процедуру tabular для составления таблиц (глава 12), а такжекоманды \footnote и \footnotetext, которые печатают подстрочные примечания.Для создания больших парбоксов с таблицами, списками, подстрочными примечаниями и прочими украшениями используется процедура minipage (министраница):\begin{minipage}[vpos][height] [inner-vpos]{width}text\end{minipage}Она имеет те же аргументы, что и команда \parbox, но в её теле text (в отличиеот \parbox) могут появляться любые команды и процедуры, кроме плавающихобъектов (глава 11).Когда команда \footnote применяется в minipage, она печатает подстрочное примечание на «дне» парбокса, создаваемого этой процедурой.
Это особеннополезно для примечаний внутри таблиц или рисунков. Более того, в отличие отобычной текстовой моды в теле процедуры minipage команда \footnote можетпоявляться в любом месте, даже внутри другого бокса или внутри ячейки таблицы (глава 12). Чтобы сделать подстрочное примечание к объекту в minipage наобычном месте внизу страницы, нужно использовать команды \footnotemark и\footnotetext. Оба варианта размещения подстрочного примечания демонстрирует следующий пример.\begin{minipage}[t]{55mm}Пример\footnote{Сноска внутри министраницы.} использованиякоманды \verb|\footnote| в министранице.\end{minipage}\hfill И \hfill\begin{minipage}[t]{55mm}Пример\footnotemark{} сноски внизу страницы.\end{minipage}\footnotetext{Cноска внизу страницы.}Здесь образуются два бокса с подстрочными примечаниями к слову «Пример»:Примерa использования команды\footnote в министранице.aИПример3 сноски внизу страницы.Сноска внутри министраницы.Если одна министраница вложена в другую, то может случиться, что подстрочное примечание будет напечатано в нижней части другого парбокса.3Cноска внизу страницы.2199.3.
Линейные боксыВыбор ширины парбокса — задача из области визуального проектированияпечатного документа. Последовательное проведение принципа логического проектирования требует, чтобы LATEX сам умел определять ширину парбокса. Обычно это невозможно, так как компилятор должен знать длину строк, на которуютребуется разбить текст. Однако при форматировании тела процедуры tabbing(раздел 12.1) длина строки заранее не фиксирована, поскольку она определяется исходным текстом.
Поэтому компилятор может установить ширину парбокса меньше указанной в аргументе width, если министраница состоит только изединственной процедуры tabbing, а самая длинная строка в tabbing короче, чемwidth. В последнем случае ширина парбокса будет равна длине этой строки.В заключение этого раздела приведём достаточно сложный пример, показывающий, как определить новую процедуру (назовём её fmpage) для печати текстового бокса в рамке. Желаемая цель достигается в два шага. Сначала текст, идущийв бокс, запоминается в виде какой-нибудь команды (назовём её \fmbox).
Для этого используем процедуру lrbox, в теле которой вызываем процедуру minipage.Затем сформатированную на первом шаге министраницу вызываем при помощикоманды \usebox, которую помещаем в аргумент команды \fbox. В итоге имеемследующее определение новой процедуры:\newsavebox{\fmbox}\newenvironment{fmpage}[1]{\begin{lrbox}{\fmbox}\begin{minipage}{#1}}{\end{minipage}\end{lrbox}\fbox{\usebox{\fmbox}}}С её помощью удаётся поместить в рамку даже текст, форматируемый процедурой verbatim:\begin{fmpage}{0.82\textwidth}\begin{verbatim}@ # $ % ^ & \_ { }\@ \# \$ \% \^ \& \_ \{ \}\end{verbatim}\end{fmpage}@ # $ % ^ & \_ { }\@ \# \$ \% \^ \& \_ \{ \}Обычными средствами этого сделать не удаётся, так как процедуру verbatimнельзя помещать в аргументы других команд (раздел 5.5).
В последнем примере\textwidth означает ширину текущей колонки текста (раздел 17.2).9.3.Линейные боксыЛинейный бокс — это чёрный прямоугольник, который печатает команда\rule[vpos]{width}{height}где vpos определяет величину смещения бокса над базисной линией строки. Отрицательное значение vpos смещает бокс вниз. По умолчанию смещение равнонулю. Все аргументы команды — нерастяжимые длины.220Глава 9. Боксы и что там внутриRule 1: \rule{1mm}{5mm}\\Rule 2: \rule[4mm]{10mm}{2mm}-1мм10мм-?2мм5мм64ммRule 1: ?Rule 2: 6 6Если выбрать линейный бокс достаточно тонким, то можно рисовать вертикальные и горизонтальные линии.Вертикальная: \rule{0.4pt}{5mm}\\Горизонтальная: \rule{10mm}{.4pt}Вертикальная:Горизонтальная:Линейный бокс нулевой толщины называется стратой.
Хотя страта невидима,тем не менее для неё отводится место.Сравните \fbox{этот бокс}с \fbox{\rule[-5mm]{0mm}{1cm}этим}.Сравните этот бокс с этим .Страта даёт возможность вставлять вертикальные пробелы там, где команда\vspace не может быть использована, например в математических формулах.9.4.РисункиLATEX имеет встроенные средства для создания несложных схем или чертежей, атакже позволяет импортировать графические изображения, подготовленные специализированными графическими программами. Первая возможность реализуется процедурой picture, вторая — командой \includegraphics из графическихпакетов graphics и graphicx. Коллекцию графических пакетов мы рассмотрим вглаве 10.
Читатель может сразу перейти к этой главе, пропустив остаток текущей. После освоения методов импортирования графических изображений нашему Читателю, вероятно, придётся обратиться к главе 11, чтобы познакомитьсяс тем, как LATEX выбирает место для размещения больших рисунков и делает кним подписи.Собственные графические возможности LATEX’а более чем ограниченны. Внаше время вряд ли найдутся любители скрупулёзного вычисления координатначала и конца каждой линии, как того требует LATEX.
Пользователям можнорекомендовать для подготовки рисунков одну из графических программ4 , которые умеют описывать рисунки, построенные на экране дисплея, в виде последовательности команд LATEX’а. Среди таких программ встречаются достаточномощные, предоставляющие пользователю весьма комфортные условия работы.Подготовленный файл с описанием рисунка может быть переписан в нужное место входного файла или введён в него командой \input.Процедура picture переводит LATEX в специальную графическую моду и формирует бокс заданных размеров. В графической моде, строго говоря, кроме деклараций можно использовать только две команды: \put и \multiput, которые4Например, texcad, latexcad или Gnuplot.9.5.
Процедура picture221размещают графические объекты в точке с заданными координатами. При необходимости скомбинировать несколько графических изображений, импортированных посредством \includegraphics, процедура picture также может быть полезной. Она незаменима, если на импортированные рисунки необходимо наложить, например, математические формулы. Чтобы сделать нечто подобное, Читателю необходимо прочитать следующий раздел, где рассказано о системе координат, которую вводит процедура picture.9.5.Процедура pictureВ процедуре picture любой графический объект, будь то текст, отрезок прямой линии, вектор, окружность или рисунок, созданный другой процедурой picture, позиционируется посредством задания координат (x,y) этого объекта. Координаты в процедуре picture измеряются вединицах\unitlengthВ отличие от других параметров длины, графические координаты записываются только цифрами без указания единицы измерения (она всегда равна \unitlength).
Так, запись (-0.5,1.75)означает, что координата x равна -0.5\unitlength, а координата y равна 1.75\unitlength.По умолчанию за единицу измерения принят 1 пункт, т. е. \unitlength=1pt. Чтобы изменитьзначение \unitlength, можно использовать команду \setlength (раздел 2.10). Переопределение \unitlength изменяет физические размеры сразу всех графических объектов в рисунках, то есть длину всех линий и диаметры всех окружностей. Однако толщина линий и размерышрифтов не зависят от \unitlength, и, следовательно, полностью пропорции рисунка не сохраняются. Область действия \unitlength подчиняется обычным правилам, поэтому в разныхрисунках можно использовать разные значения \unitlength.