На практике приходится иногда выходить за пределы возможностей
ms
,
mm
или других пакетов, чтобы реализовать некоторые свойства "чистой"
troff
. Однако, как и к программированию на языке Ассемблера, прибегать к этому следует в крайних случаях.
Вероятны три ситуации: доступ к специальным символам, использование встроенных команд замены шрифта и введение нескольких базовых функций форматирования.
Имена символов
Доступ к необходимым символам (греческим буквам, например, , графике вида • и †, разнообразным штрихам и пробелам) несложен, хотя и не вполне систематизирован. Каждый такой символ имеет имя
\c
, где с — одиночный символ, или
\(cd
, где cd —
пара символов.
Программа
troff
печатает минус в коде ASCII как дефис, а не как '—'. Настоящий минус должен обозначаться через
\-
, а тире через
\(em
, называемое "em пунктир", символ "тире".
В табл. 9.3 перечислены наиболее часто используемые специальные символы; в справочном руководстве по
troff
их число намного больше (в вашей системе перечень специальных символов может быть иным).
–
–
Дефис
\(hy
–
Дефис, аналогичный предыдущему
\-
–
Знак "минус", набираемый текущим шрифтом
\(mi
–
Знак "минус", набираемый математическим шрифтом
\(em
—
em тире
\&
Ничего; защищает точку в начале строки
\blank
Неразмножаемый пробел
\|
Неразмножаемый полупробел
\е
Символ экранирования, обычно \
\(bu
Жирная точка
\(dg
Крестик †
\(*a
,
\(*b
=,
\(*с
=,
\(*p
= и т.д.
\fX
Символ смены шрифта на X; Х=
Р
— предыдущий (шрифт)
\f(XX
Символ смены шрифта на XX
\sn
Символ смены размера шрифта на n; n=0 — предыдущий
\s+-n
Относительная замена размера шрифта
Таблица 9.3: Некоторые последовательности специальных символов
troff
В ряде случаев требуется, чтобы
troff
не интерпретировала символ, особенно обратную дробную черту или точку в начале строки. Два наиболее часто применяемых "отменяющих" символа —
\e
и
\&
. Последовательность
\е
гарантированно печатается как обратная дробная черта, не интерпретируется и используется для получения такого символа в выходном потоке. С другой стороны,
\&
не несет никакой смысловой нагрузки: это пробел нулевой ширины. Главное назначение этой комбинации — заставить
troff
не интерпретировать точки в начале строк. Мы задействовали
\е
и
\&
здесь несколько раз. Например, фрагмент
ms
в начале главы был напечатан как
\&.TL
.I "Название
документа"
\&.AU
.I "Имя автора"
\&.AB
\&...
...
Конечно, этот фрагмент был напечатан следующим образом:
\e&.TL
\&.I "Название документа"
\е& .AU
...
и вы можете себе представить, как в свою очередь был напечатан последний фрагмент.
Другой специальный символ, "неразмножаемый" пробел, появляется изредка: это символ
\
, за которым следует пробел. Как правило,
troff
размножает обычный пробел, чтобы выровнять границы, но неразмножаемый пробел не позволяет "растягивать" строку. Он подобен любому другому символу и имеет фиксированную ширину. Его также можно использовать для передачи нескольких слов единым аргументом:
.I Название\ документа
Смена шрифта и размера символов текста
В большинстве случаев замена шрифтов и форматов может быть сделана с помощью начинающей строку макрокоманды типа
.I
, но иногда их замена должна осуществляться и в строке. В частности, символ конца строки разделяет слова, поэтому если требуется сменить шрифт в середине слова, макрокоманду нельзя использовать. С помощью
troff
можно решить эту проблему (отметим, что именно
troff
, а не пакет ms обеспечивает такую возможность).
Встроенные (in-line) команды troff вводит с использованием символа
\
. Наиболее часто применяются команды
\f
для смены шрифта и
\s
для смены формата.
Шрифт, заменяемый командой
\f
, определяется символом, следующим непосредственно за
возвращает нас к предыдущему шрифту — тому, который был до последнего переключения. (Есть только один предыдущий шрифт, т.е. стека нет.)
Некоторые шрифты имеют двухсимвольные имена. Они специфицируются форматом
\f(XX
, где
XX
— имя шрифта. Например, шрифт, которым напечатаны программы в нашей книге, называется
CW
(курьер постоянной ширины), поэтому
keyword
пишется так:
\f\(CWkeyword \fP
Очевидно, печатать это довольно неудобно, поэтому мы ввели расширение
ms
макрокоманду
.CW
, так что теперь нет необходимости печатать или читать символы
\
.
Воспользуемся указанным расширением, чтобы набирать слова внутри строки, такие, как
troff
, следующим образом:
The
.CW troff
formatter ...
Решения о форматировании, определяемые макрокомандами, также легко потом поменять.
Смена размера шрифта осуществляется последовательностью
\sn
, где
n
— одна или две цифры, определяющие новый размер:
\s8
переключает на восьмиточечный размер. В принципе можно выполнять относительные замены, предпосылая размеру плюс или минус. Например, слова можно напечатать в SMALL CAPS, введя
\s-2SMALL CAPS\s0
Комбинация
\s0
предписывает возвратить размер к его предыдущему значению. Это аналог
\fP
, но, следуя традиции
troff
, она не записывается как
\sP
. Наши расширения
ms
включают макрокоманду
.UC
(прописные буквы) для такого рода работы.
Основные команды
troff
Даже располагая хорошим пакетом макрокоманд, мы должны знать достаточно много команд
troff
для управления пробелами и заполнением, для установки позиций табуляции и т.п. Команда
.br
вызывает "обрыв", т.е. следующий вводимый за
.br
текст окажется на новой выходной строке. Это явление можно использовать, например, чтобы расщепить длинное название в подходящем месте: