Лекция 11 ТеХ и Постскрипт Ящики (boxes — боксы) • Я вам раньше не говорил о еще одном типе данных и о переменных такого типа. Это box. Обычный перевод – бокс. Это слово использовали авторы TROFF при своем подходе к набору формул, и Кнут заметив замечательные свойства этого понятия сделал его основным. • В ТеХе бокс определяется как «двумерный объект прямоугольной формы, умеющий три измерения – ширину, высоту и глубину. У бокса есть базовая линия и точка привязки, все это видно на рисунке, взятом из книги «Все о ТеХе». Типичный бокс с его размерами Действия с боксами • Боксы можно группировать вместе, составляя новые боксы. Два основных типа группируемых боксов — горизонтальные и вертикальные. • Команда \hbox определяет горизонтальный бокс, в котором все внутренние боксы выстраиваются непосредственно друг за другом по их базовой линии. • Горизонтальные боксы собирают вместе в вертикальный бокс или \vbox. Например, (это все цитата из Кнута) • \vbox{\hbox{Две строки}\hbox{набора.}} • При обычном наборе ТеХ сам формирует горизонтальные и вертикальные боксы и создает из них страницу, которая также помещается в бокс, — системный бокс. Действия с боксами (еще) • Боксы можно группировать при группировке сдвигать по вертикали и по горизонтали. • Вот как выглядит содержимое команды \TeX для известного логотипа системы ТеХ • \hbox{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125em X} • Кроме появившихся здесь команд \kern для горизонтального сдвига и \lower для опускания бокcа, есть еще, конечно, команда \raise для поднимания бокса. • Системные боксы — это боксовые регистры, имеющие номера от 0 до 255, ими нужно пользоваться очень осторожно, так как их ТеХ использует для своей работы. Рекомендуется формировать новый бокс в \box0 (командой \setbox0) и тут же его использовать. Повторное использование бокса • В ЛаТеХе есть возможность вводить переменные типа бокс, которым можно присваивать значения, а потом вставлять их в текст (не форматируя заново их содержимое). • Вот эти команды • • • • \newsavebox{mybox) \savebox{mybox}[40pt]{Опять то же самое!} \sbox{mybox}{Опять то же самое! } \usebox{mybox} % l-r text % l-r-text • Более сложный вариант использования сохраняемого текста дает процедура (обстановка) lrtext. Например, • \begin{lrtext}{mybox} Опять \verb|ТО ЖЕ| самое \end{lrtext} Средства для набора алгоритмов • Я рассказывал уже о задаче такого набора алгоритмов, чтобы каждый пункт алгоритма имел нужный отступ, а весь алгоритм был бы отчеркнул слева вертикальной чертой. • Необходимые макросы были написаны и использованы при наборе книги Д.Гасфилда «Строки, деревья etc.» по инициативе редактора книги О.М.Рощиненко, так что названия макросов начитаются с ОМ. • Сначала мы посмотрим на макросы в рабочей форме. Средства для набора алгоритмов (2) • • • • • • • • • • • • • \newlength{\OMW}\newlength{\OMw}\newlength{\OMh} \newlength{\OMH}\newlength{\OMd} \newcommand{\OMbx}[3][0pt]{\setlength{\OMw}{\linewidth}% \addtolength{\OMw}{-5pt}\setlength{\OMW}{\OMw}% \addtolength{\OMW}{-#2}% \settoheight{\OMh}{\makebox{\begin{minipage}[b]{\OMW}#3\end{minipage}} }% \setlength{\OMH}{\OMh}\addtolength{\OMH}{7pt}\addtolength{\OMH}{#1}% \setlength{\OMd}{-#1}\addtolength{\OMd}{-4pt}% \noindent\raisebox{\OMd}[\OMh][#1]{\rule{0.2pt}{\OMH}}\rule{4.9pt}{0pt }% \makebox[\OMw][r]{\begin{minipage}[b]{\OMW}#3\end{minipage}}\\[#1]} \newcommand{\kusu}[2][0pt]{\OMbx[#1]{8pt}{#2}} \newcommand{\ktab}[2][0pt]{\OMbx[#1]{34pt}{#2}} \newcommand{\ktabi}[2][0pt]{\OMbx[#1]{50pt}{#2}} Средства для набора алгоритмов (3) • • • • • \newlength{\OMW} \newlength{\OMw} \newlength{\OMh} \newlength{\OMH} \newlength{\OMd} % % % % % Ширина набираемого текста Ширина текста с отступом Чистая высота набора Внешняя высота набора Спуск набора от базовой линии • • • • • • • • • • • • \newcommand{\OMbx}[3][0pt]{% основная команда % #1 - ExtraH доп. верт. пробел % #2 - Woffset гориз. отступ % #2 - Text набираемый текст \setlength{\OMw}{\linewidth} \addtolength{\OMw}{-5pt}% OMw := linewidth - 5pt \setlength{\OMW}{\OMw} \addtolength{\OMW}{-#2}% OMW := OMw - Woffset \settoheight{\OMh} {\makebox{\begin{minipage}[b]{\OMW}#3\end{minipage}}} % OMh := высота бокса ширины OMW с нужным текстом, % выровненного по основанию Средства для набора алгоритмов (4) • • • • • • • • • • • • • • • • • \newcommand{\OMbx}[3][0pt]{% основная команда . . . . . . . . \setlength{\OMH}{\OMh} \addtolength{\OMH}{7pt} \addtolength{\OMH}{#1}% OMH := OMh + 7pt + ExtraH \setlength{\OMd}{-#1} \addtolength{\OMd}{-4pt} OMd := -ExtraH - 4pt \noindent% начался вывод текста \raisebox{\OMd}[\OMh][#1]{% \rule{0.2pt}{\OMH}} % вертикальная линейка \rule{4.9pt}{0pt} % стандартный отступ после нее \makebox[\OMw][r] {\begin{minipage}[b]{\OMW}#3\end{minipage} % нужный текст в такой же министранице, как раньше, % она помещается в ящик ширины OMw с центровкой по % правому краю. }\\[#1]} % перевод строки с доп. пробелом ExtraH Средства для набора алгоритмов (5) • • • • • • • • • • • \newcommand{\kusu}[2][0pt]{\OMbx[#1]{8pt}{#2}} \newcommand{\ktab}[2][0pt]{\OMbx[#1]{34pt}{#2}} \newcommand{\ktabi}[2][0pt]{\OMbx[#1]{50pt}{#2}} \kusu{begin}[2pt] \ktab{вычислить $m$ и $n$;} \ktab{разместить и заполнить нулями матрицу $m\times n$;} \ktab{в цикле по $k$ begin} \ktabi{вычислить $i$ и $j$, соответствующие $k$;} \ktabi{увеличить элемент $a[i,j]$ на единицу;} \ktab{end;} \kusu{end;} Графические пакеты • Теперь перейдем к вставке графики в ТеХ-овский текст. Для вставки используются специальные пакеты. • Сейчас больше всего рекомендуется пакет graphicx (до него использовались пакеты graphics и epsfig). • Этот пакет вводит некоторые новые возможности манипулирования с боксами, которые нам будут хорошо понятны после знакомства с ПостСкриптом. Манипуляции с боксами в пакете • • • • Возможны следующие команды: \rotatebox{angle}{lr-text} \scalebox{h-scale}[v-scale]{lr-text} \reflectbox{lr-text} == \scalebox{-1}[1]{lrtext} • \resizebox{width}{height}{lr-text} • Это соответственно поворот бокса на заданный угол, масштабирование бокса (и его зеркальное отражение — как частный случай), а также масштабирование до заданного размера. • Все эти действия можно выполнять отдельно, но они включены и в главную команду пакета в качестве факультативных параметров. Команда включения графического файла • • • • • • • • Это на самом деле две команды \includegraphics[keyval-list]{gr-file} \includegraphics*[keyval-list]{gr-file} Второй вариант отличается от первого тем, что к списку ключей автоматически добавляется ключ clip. Список ключей очень богат, он состоит из разделяемых запятыми записей об отдельных ключах. Порядок задания ключей учитывается при исполнении. Каждая запись включает имя ключа, за которым может следовать знак равенства и значение или набор значений. Например, возможны два варианта для ключа, ограничивающего изображаемую часть рисунка его «законной территорией»: clip clip=true Ключи поворота и масштабирования scale=1.5 — гомотетичное изменение с заданным масштабом width=0.7\totalwidth — подгонка ширины под заданную heigth=50mm — подгонка высоты бокса под заданную. totalheight — для полной высоты keepaspectratio — для соблюдения пропорций при подгонке angle=10 — угол поворота против часовой стрелки (по умолчанию в градусах). • origin=c — Точка, вокруг которой производится поворот. • • • • • • • Возможные значения этого ключа изображены на рисунке на следующем слайде. Позиции точки поворота • В квадратных скобках написаны возможные значения ключа origin для центра поворота картинки Порядок задания ключей • От порядка задания ключей зависит результат. Вот пример • \includegraphics{angle =90,totalheight=0.45in ]{box.eps} \includegraphics{total height=0.45in, angle=90]{box.eps} Ключи ограничивающего бокса • bb=0 0 1in 2in — весь ограничивающий бокс (левый нижний угол, потом правый верхний) • bbllx, bblly, bbrux, bbruy — параметры по отдельности • natwidth, natheigth — натуральные размеры рисунка. • trim=1mm 5mm 3mm 12mm — отрезание полей рисунка • viewport=10pt 20pt 72pt 72pt — вырезание видимой части из определенного ограничивающего бокса • draft=true — черновой режим импортирования, заменяющий рисунок рамкой по размерам ограничивающего бокса. Глобальная установка ключей • Для глобальной установки ключей в командах \rotatebox и \includegraphics можно воспользоваться командой • \setkeys{operation}{keyval-list} • где operation принимает значения • Grot — при задании параметров \rotatebox • Gin — при задании параметров \includegraphics • Например, • \setkeys{Gin}{draft=true,width=0.5\textwidth} • или • \setkeys{Grot}{units=6.28318} • чтобы задавать углы поворота в радианах.