E N D
Лекция 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]{Опять то же самое!} % l-r text • \sbox{mybox}{Опять то же самое! } % l-r-text • \usebox{mybox} • Более сложный вариант использования сохраняемого текста дает процедура (обстановка)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]{lr-text} • \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{totalheight=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} • чтобы задавать углы поворота в радианах.