Чтение онлайн

ЖАНРЫ

UNIX — универсальная среда программирования
Шрифт:

На практике приходится иногда выходить за пределы возможностей

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
:

a\fBпро\fIизвольное \fR \fI мно\fBжество \fIшрифтов\fP

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

про извольное мно жество шрифтов

При смене шрифта

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

Некоторые шрифты имеют двухсимвольные имена. Они специфицируются форматом

\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
текст окажется на новой выходной строке. Это явление можно использовать, например, чтобы расщепить длинное название в подходящем месте:

.TL

Hoc - Диалоговый язык

Поделиться с друзьями: