Главная » Программирование для UNIX » Макропакет ms

0

Основная идея  макропакета заключается в том, что документ описывается в терминах его логической структуры: название, заголовки разделов, абзацы, и не надо указывать размеры букв, шрифты и расстояния между строками. Пользователь освобожден от тяжелой работы, а документ изолирован от не относящихся к делу подробностей. На самом деле, применяя различные наборы макроопределений с одинаковыми логическими именами, можно создать документы, выглядящие абсолютно по-разному. Например, документ может пройти через  стадии технического отчета, материалов конференции, газетной статьи и главы книги с одними и теми же командами форматирования, использованными четырьмя разными макропакетами.

Входными данными для  troff, вне зависимости от того, используется ли  макропакет, является  обычный текст, по  которому «рассыпаны» команды форматирования. Существует два вида команд.

Команда первой разновидности состоит из точки в начале строки, за которой следуют одна или  две  буквы или  цифры и,  возможно, пара метры, как в примере ниже:

.PP

.ft B

This  is a little bold  font   paragraph.

Имена всех  встроенных в troff команд заданы буквами в нижнем регистре, поэтому было принято соглашение называть команды макропакетов именами в верхнем регистре. В данном примере .PP  – это команда макропакета ms для нового  абзаца, а .ft B  – это команда troff, вызывающая изменение шрифта на полужирный. (Названия шрифтов

записываются в  верхнем регистре;  наборы  шрифтов,  доступных на разных наборных машинах, могут  отличаться друг от друга.)

Второй  вид  команд troff  выглядит как символьная строка, начинающаяся с символа обратной косой  черты \, которая может находиться в любом  месте  ввода; например \fB также вызывает изменение шрифта на полужирный. Такая форма  команды присуща именно troff; об этом еще будет рассказано позже.

Перед  каждым новым абзацем используйте команду .PP, при этом для форматирования большинства документов можно обойтись дюжиной команд ms. Например, в приложении 2, описывающем hoc, есть название,  имена авторов, аннотация, автоматическая нумерация разделов и абзацы. В нем  использовано всего 14 команд, некоторые из  которых являются парными. Страница обретает форму  в ms:

.TL

Название документа (одна или несколько строк)

.AU

Имена авторов, по одному на строке

.AB

Аннотация, заканчивающаяся .AE

.AE

.NH

Пронумерованный заголовок (автоматическая нумерация)

.PP

Абзац…

.PP

Еще абзац…

.SH

Подзаголовок (без нумерации)

.PP

Команды форматирования могут  встретиться в начале строки. Формат исходных данных между командами свободный (положение символов новой  строки не имеет  значения), потому что troff переносит слова  из строки в строку, чтобы сделать их  достаточно длинными (такой процесс  называется заполнением), и равномерно  распределяет дополнительные пробелы между словами, чтобы  выровнять края (выравнива5 ние). Однако начинать каждое предложение с новой строки – это хорошая привычка, она облегчает дальнейшее редактирование.

Вот начало настоящей документации по hoc:

.TL

Hoc – An  Interactive Language For  Floating Point  Arithmetic

.AU

Brian  Kernighan Rob Pike

.AB

.I Hoc

is a  simple  programmable  interpreter for  floating  point  expressions.

It has  C–style  control  flow, function  definition  and the  usual numerical  built–in  functions

such  as  cosine  and logarithm.

.AE

.NH Expressions

.PP

.I Hoc

is  an  expression  language, much  like  C:

although there  are  several  control–flow  statements, most statements such  as  assignments

are  expressions whose  value  is disregarded.

Команда .I выделяет свой аргумент курсивом или включает печать наклонными буквами, если аргумент не задан.

Если используется макропакет, он указывается как аргумент troff:

$ troff -ms hoc.ms

Символы, следующие за –m, задают макропакет.1 При форматировании с помощью ms лист  статьи о hoc выглядит так:

Hoc – An Interactive Language For Floating Point Arithmetic

Brian Kernighan Rob Pike

ABSTRACT

Hoc  is a simple programmable interpreter for  floating point expressions. It has  C-style control flow, function definition  and  the  usual  numerical built-in functions such  as cosine and logarithm.

1.  Expressions

Hoc is an expression language, much like C: although there are  several  control-flow statements,  most  statements such   as  assignments are expressions whose value is disregarded.

1        Макросы ms находятся в файле /usr/lib/tmac/tmac.s, а макросы man – в /usr/ lib/tmac/tmac.an.

Отображения

Обычно то, что troff заполняет и выравнивает строки, можно рассматривать как удобство, но иногда это нежелательно, например в текстах программ. Такой неформатированный  материал  называется отобра жаемым текстом. Команды ms .DS (display start – начало отображения) и .DE (display end – конец отображения) отделяют текст, который должен быть напечатан в том виде, в каком он введен, структурированно, но без перегруппировки. Приведем следующую часть  учебника по hoc, в которой есть фрагмент отображаемого текста:

.PP

.I Hoc

is  an  expression  language, much  like  C:

although there  are  several control–flow  statements,  most statements such  as  assignments  are  expressions whose  value  is  disregarded.

For  example,  the  assignment  operator = assigns the  value of  its right  operand  to  its left  operand, and yields

the  value, so  multiple  assignments work.

The expression grammar is:

.DS

.I

expr:                                  number

|       variable

|       ( expr  )

|       expr  binop  expr

|       unop expr

|       function  ( arguments  )

.R

.DE

Numbers  are  floating point.

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

Hoc  is an expression language, much like C: although there are several control-flow  statements, most statements such  as  assignments are   expressions  whose   value is  disregarded.  For   example, the  assignment operator = assigns the  value of its right operand to its left operand, and   yields the  value, so  multiple assignments work. The expression grammar is:

expr:

number

|

variable

|

(expr)

|

expr binop expr

|

unop expr

|

function (arguments)

Numbers are floating point.

К отображаемому тексту не применяется заполнение и выравнивание. Следовательно, если на текущей странице недостаточно места, то отображаемый материал (и все, что следует за ним) помещается на следую щую страницу. У команды .DS есть несколько параметров, в том числе  L  для выравнивания по  левому краю, C  для центрирования каждой строки в отдельности и B, центрирующий весь отображаемый текст целиком.

Элементы отображения, приведенного выше, разделены знаками табуляции. По умолчанию шаг  табуляции в troff равен половине дюйма, а не восьми пробелам, как обычно. И даже если бы точки табуляции были расставлены через каждые 8 пробелов, то (так как все символы имеют разную ширину) знаки табуляции,  обработанные troff, не всегда  выглядели бы, как ожидалось.

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

Макрос ms предоставляет три команды для изменения шрифта. Команда .R меняет шрифт на прямой, обычный шрифт, .I меняет шрифт на курсив, а .B – на полужирный. Введенные без аргументов команды определяют шрифт последующего текста:

This  text is roman, but

.I

this text is italic,

.R

this is roman again, and

.B

this is boldface.

этот текст будет выглядеть так:

This  text is roman, but  this text is italic, this is roman again, and  this  is boldface.

Команды .I и  .B  обрабатывают  необязательный  аргумент, который указывает, что изменение шрифта должно применяться только к аргу менту. В troff аргументы, содержащие пробелы, должны заключаться в кавычки, причем существует единственный символ, который может быть использован с этой целью – двойные кавычки ".

This  is roman,  but

.I this

is italic, and

.B  "these  words" are  bold.

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

This is roman, but  this is italic, and these words are bold.

Наконец,  второй аргумент  команды  .I или  .B  выводится прямым шрифтом, непосредственно за первым аргументом (без пробелов). Такая возможность часто используется для  выведения знаков пунктуации правильным шрифтом. Сравните последнюю скобку в

(parenthetical

.I "italic words)"

Здесь  она выводится неправильно, то есть (parenthetical italic words)

с последней скобкой в

(parenthetical

.I "italic words" )

Эта скобка напечатана правильно: (parenthetical italic words)

Различия  шрифтов распознаются nroff,  но  результат выглядит  не очень  обнадеживающе. Курсивные символы подчеркиваются, а полужирных символов вообще  нет (некоторые версии nroff имитируют полужирный шрифт наложением символов).

Разнообразные команды

Сноски вводятся командой .FS, а завершаются командой .FE. Ответст венность за идентифицирующие сноску метки, такие как звездочка * или крестик † ложится на вас. Эта сноска была  создана таким образом:

сноски пометки, такие как звездочка  или крестик.\(dg

.FS

\(dg   Например, вот такой крестик.

.FE

Эта сноска была создана  таким образом…

Абзацы с отступом (с цифрой или  другой  меткой с краю) создаются при помощи команды .IP. Пусть требуется создать:

(1)                             Первый маленький абзац.

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

Тогда надо ввести:

.IP  (1)

Первый  маленький абзац.

†      Например, вот такой крестик.

.IP  (2)

Второй абзац,  который…

Признаком конца команды .IP  является .PP или .LP (абзац, выровненный  по левому краю). Аргументом .IP  может быть  любая строка; при необходимости защищайте пробелы кавычками. Второй  аргумент может  быть использован для указания величины отступа.

Применение пары команд .KS и .KE приводит к тому, что текст не раз деляется, то есть текст, заключенный между двумя этими командами, будет перенесен на новую страницу, если не поместится целиком на текущую. Если  вместо  .KS использована .KF,  то текст перемещается за последующий текст, в начало следующей страницы, если  надо  сохра нить  его целиком  на  одной  странице. Команда .KF использована  для  всех таблиц в этой книге.

Большинство из значений ms по умолчанию можно изменить, задав регистры чисел, – это переменные troff, используемые ms. Наверное, чаще всего используются регистры, которые управляют размером текста и расстоянием между строками. Обычный размер текста (который вы читаете сейчас) – это «10 пунктов», где пункт – это единица, унаследованная из  полиграфии, равная приблизительно 1/72  дюйма. Расстояние между строками обычно равно  12 пунктам. Чтобы изменить эти величины, например на 9 и 11 (как на наших дисплеях), установите регистры чисел  PS и VS посредством

.nr PS 9

.nr VS  11

Существуют еще  такие регистры чисел, как LL  – для длины строки, PI  – для  отступа абзаца и PD  – для  расстояния между абзацами. Они вступают в силу  при  вводе  следующей команды .PP или  .LP. Команды ms представлены в табл. 9.1.

Таблица 9.1. Часто используемые в ms команды форматирования (см. также ms(7))

Команда   Смысл

.AB              начало аннотации; заканчивается .AE

.A            U                      имя   автора на  следующей строке;  разрешено использование нескольких .AU

.B            начало полужирного шрифта или применение полужирного шрифта к аргументу, если он задан

.D            S t       начало отображаемого текста (незаполняемого); заканчивается .DE t = L (выравнивание по левому краю), C (центрирование), B (блочное центрирование)

.E            Q  s           начало математического выражения s (ввод eqn); заканчивается .EN

.F            S              начало сноски; заканчивается .FE

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

Команда

Смысл

.I

.IP  s

.KF

.KS

.LP

.NH  n

.PP

.R

.SH

.TL

.TS

начало курсива или применение курсива к аргументу, если он задан абзац с отступом s

сохранять текст неразделенным, если нужно, переместить на следующую страницу; заканчивается .KE

сохранять текст неразделенным на странице; заканчивается .KE

новый абзац, выровненный по левому краю

нумерованный заголовок  n-го  уровня; заголовок  следует, до  .PP

или .LP

новый абзац

вернуться к прямому шрифту подзаголовок; заголовок следует, до .PP название следует; до следующей команды ms начало таблицы (ввод tbl); заканчивается .TE

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

По теме:

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