Главная » Программирование для UNIX » Использование самой программы troff

0

В реальной жизни иногда случается так, что надо  выйти за  пределы возможностей ms, mm  или какого-то другого пакета для  того, чтобы  обратиться к средствам, предлагаемым «голой» программой troff. Однако, учитывая то, что это подобно программированию на языке Ассемблера, стоит  обращаться к troff только в случае крайней необходимости и действовать осторожно.

Возможны три ситуации: доступ к специальным символам, изменение шрифта и размера внутри строки и несколько базовых функций форматирования.

Названия символов

Получить доступ  к необычным символам:  греческим буквам, таким как π, графическим символам (, † и т. д.) и множеству линий и фигур

несложно, хотя осуществляется это не слишком систематично. У каждого такого символа есть имя, которое выглядит как \c, где c– это одиночный символ, или как \(cd, где cd – это пара символов.

Программа troff выводит знак минус из набора ASCII как дефис -, а не как минус –. Чтобы получить настоящий минус, введите \–, а чтобы получить тире, введите \(em, что означает «em  dash» (длинное тире), символ —.

В табл. 9.3 перечислены основные специальные символы; в руководстве по troff их гораздо больше (список специальных символов конкретной системы может отличаться от представленного).

Таблица 9.3. Некоторые специальные последовательности символов в troff

Последовательность  Значение

-

дефис

\(hy

-

дефис, такой же, как и выше

\–

знак минус в текущем шрифте

Таблица 9.3 (продолжение)

Последовательность

Значение

\(mi                –

\(em               —

\&

\blank

\|

\e

\(bu

\(dg

\(*a

\fX

\f(XX

\sn

\s±n

знак минус в математическом шрифте длинное тире

ничто; защищает начальную точку пробел фиксированной ширины фиксированный пробел половинной ширины литеральный символ escape, обычно это \ маркер абзаца

крестик †

α.  \(*b=β, \(*c=ξ, \(*p=π и т. д.

изменение шрифта на X; X=P – изменение на предыдущий шрифт

изменение шрифта на XX

изменение на размер n пунктов; n =0 – предыдущий относительное изменение размера в пунктах

Бывают случаи, когда необходимо сообщить troff, что она не должна интерпретировать символ, главным образом это касается обратной косой черты и начальной точки. Для  этого используются команды \e и

\&.  Последовательность \e гарантированно  выводит обратную косую  черту, не  интерпретированную программой troff, она  используется, когда надо, чтобы выходные данные содержали этот символ. А вот \& –

это абсолютное ничто, пробел  нулевой ширины. Основное  назначение

этой  последовательности в том,  чтобы предотвращать интерпретацию программой troff точек в начале строк. При  наборе  данной главы две указанные команды использовались очень  часто. Например, ms-макет страницы, представленный в начале главы, был введен следующим образом:

\&.TL

.I "Title of  document"

\&.AU

.I "Author  name"

\&.AB

\&…

Естественно, отрывок, приведенный выше, был введен  как

\e&.TL

\&.I  "Title of  document"

\e&.AU

и вы уже  можете себе представить, что,  в свою очередь, было  введено здесь.

Еще один время от времени встречающийся специальный символ – это фиксированный  пробел, символ обратной косой  черты \, за  которым следует пробел. Обычные пробелы  troff растягивает, для  того  чтобы  выровнять края, а фиксированный пробел  никогда не корректируется,  он воспринимается как любой другой символ, и его ширину изме нять  нельзя.  С его  помощью также можно передать  несколько слов как единый аргумент:

.I Title\  of\  document

Изменение шрифта и размера

Большинство изменений шрифта и формата реализуются макросами, действующими с начала строки, например .I, но бывает и так, что изменение должно быть  осуществлено внутри строки. В частности, символ новой строки является разделителем слов, поэтому, если  надо  изменить шрифт в середине слова,  то макросы использовать нельзя. В этом подразделе будет рассказано о том, как troff решает эту проблему (обратите внимание, что решение обеспечивает именно troff, а не макропакет ms).

Для  представления команд, действующих внутри строки (а не с ее начала), troff использует символ обратной косой  черты. Две самые распространенные команды – это \f для изменения шрифта и \s для изме нения размера в пунктах.

Шрифт указывается в команде \f символом, непосредственно следующим  за f:

a \fBfriv\fIolous\fR  \fIvar\fBiety\fR of  \fIfonts\fP

выводится как

a frivolous variety of fonts

Изменение шрифта вида  \fP  возвращает к предыдущему шрифту, каким  бы  он  ни  был  (есть  только один  предыдущий шрифт,  стековой структуры не существует).

Названия некоторых шрифтов состоят из двух букв. Они указываются в формате \f(XX, где XX  – это название шрифта. Например, шрифт на наборной машине авторов, которым напечатаны листинги в этой книге, назывался CW (Courier Constant Width), поэтому слово keyword вводилось как

\f(CWkeyword\fP

Вводить это  достаточно тяжело,  поэтому  авторы добавили в ms  свой собственный макрос .CW, и больше им  уже  не приходилось вводить и

читать символы обратной косой  черты. Этот макрос применялся для  набора слов, расположенных в середине строки, например

The

.CW  troff formatter  …

Форматирование, заданное макросом, в дальнейшем легко можно изменить.

Изменение размера вводится последовательностью \sn, где n – это одна  или  две  цифры, указывающие новый размер: \s8  переключает на размер в 8 пунктов. Можно задать и относительное изменение размера, для этого перед  цифрой ставится знак плюс или минус. Например, чтобы  вывести слова «капителью» (SMALL CAPS)

\s–2SMALL  CAPS\s0

\s0  вызывает возвращение размера к его предыдущему значению. Эта команда является аналогом \fP, но, следуя традициям troff, не называется \sP. Расширение ms, реализованное авторами книги, содержит макрос .UC (upper case – верхний регистр) для выполнения этой работы.

Основные команды troff

Жизненный опыт показывает, что даже при наличии хорошего макропакета необходимо знать несколько команд troff для контроля над заполнением и интервалами, расстановкой знаков табуляции и т. д. Команда .br вызывает разрыв, то есть фрагмент входных данных, следу ющий за .br, появится в выводе на новой строке. Такую возможность используют, например, чтобы  разделить длинное название на части в нужном месте:

.TL

Hoc – An  Interactive Language

.br

For  Floating Point  Arithmetic

Команда .nf выключает режим обычного  заполнения строк вывода; каждая строка ввода переходит непосредственно в одну  строку вывода.  Команда .fi включает режим заполнения  обратно.  Команда .ce  центрирует следующую строку.

Команда .bp начинает новую  страницу. Команда .sp  вызывает появление в выводе пустой строки. Для команды .sp  может быть указан аргумент, задающий количество пустых строк или  размер пустого  прост ранства.

.sp  3                              Оставить 3 строки пробелов

.sp  .5                         Оставить полстроки пробелов

.sp  1.5i                     Оставить 1,5 дюйма

.sp  3p                            Оставить 3 пункта

.sp  3.1c                         Оставить 3,1 сантиметра

Дополнительное пространство внизу страницы игнорируется, так  что

.sp с большим аргументом эквивалентна .bp.

Команда .ta  расставляет точки табуляции  (изначально установлены через  полдюйма).

.ta  n n n  

Вышеприведенная команда устанавливает  точки табуляции на  ука занном расстоянии от левого  края; как и в команде .sp, каждое число n указывается в дюймах, если  за ним  стоит буква «i». Точка табуляции  с суффиксом R  выровняет текст по правому краю (в  следующей точке), а суффикс C вызовет центрирование.

Команда .ps  n устанавливает размер кегля равным n; команда .ft X задает шрифт X. Правила, касающиеся увеличения размера и возвращения к предыдущему значению, аналогичны описанным для  команд

\s и \f.

Определение макросов

Попытки охватить все аспекты определения макросов могут  завести в такие лабиринты troff, что оттуда нам будет уже  не выбраться, поэтому  остановимся только на  основных идеях. Например, вот  определение макроса .CW:

.de CW                                                 Начало определения

\&\f(CW\\$1\fP\\$2     Изменение шрифта вокруг первого аргумента

..                  Конец определения

Команда \$n  выводит значение n-го  аргумента при  обращении к макросу; если n-й аргумент не задан, вывод  пуст. Двойной символ \ задерживает  оценку \$n   во  время определения  макроса.  Последовательность \& предотвращает интерпретацию аргумента в качестве команды troff в случае, если он начинается с точки, например

.CW  .sp

Источник: Керниган Б., Пайк Р., UNIX. Программное окружение. – Пер. с англ. – СПб: Символ-Плюс, 2003. – 416 с., ил.

По теме:

  • Комментарии