Производственно-внедренческий кооператив

"И Н Т Е Р Ф Е Й С"













Диалоговая Единая Мобильная

Операционная Система

Демос/P 2.1










Макропакет -me.

(Справочное руководство)
















Москва

1988













Этот документ содержит описание макропакета -me для
программ форматирования документов nroff/troff. Предполага-
ется, что читатель знаком с этими программами, в частности с
понятиями разрыва формата, шрифта, пункторазмера, с приемами
определения и использования числовых регистров, строк и мак-
росов, а также с заданием масштабирующих множителей при чис-
ловых параметрах, позволяющих работать в различных единицах
измерения, таких как пункты, единицы EN (ширина буквы 'n'),
вертикальная разрядка , и т.п.

Более доступное описание методики использования -me
содержится в документе "Подготовка текстов с помощью прог-
раммы nroff и макропакета -me."

В системе форматирования документов существует набор
макропараметров, значения которых должны быть правильно
установлены. Так например, номеру шрифта должен быть прис-
воено одно из допустимых значений. В nroff'е шрифт 8 задает
подчеркивание текста, а в troff'е устанавливает жирный шрифт
(в то же время шрифт 3 , являющийся жирным шрифтом в
troff'е, не выделяется подчеркиванием в nroff'е). Установка
шрифта 0 вообще не вызывает изменения шрифта, вместо него
используется шрифт установленный в данный момент. Следует
помнить, что шрифты 0 и 8 являются "псевдо-шрифтами"; то
есть, их установка имитируется с помощью макросов. Это
означает, что хотя присваивание регистру шрифта значений 0 и
8 является корректной операцией, выполнение установки шриф-
тов с этими номерами с помощью переключающей последователь-
ности, подобной:

\f8

вызовет ошибку.

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

.nr pi 8n

а не

.nr pi 8

что приведет к установке отступа шириной 8 базовых единиц,
то есть шириной около 0.02 дюйма. Далее везде значения
параметров, присваиваемые по умолчанию будут приводится в
тексте в квадратных скобках.

Регистры и строки вида $x можно использовать в выраже-
ниях, но их не следует изменять. Макросы вида $x выполняют
определеные функции (описанные ниже) и могут быть


- 1 -










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

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

Флаг -rx1 может быть использован для установки режима
печати с интервалом шириной одна восьмая дюйма, что является
стандартом для печатающих устройств некоторых типов. Однако
этот интервал обычно слишком мал для хорошей разборчивости
текста, поэтому по умолчанию устанавливается межстрочный
интервал шириной 1/6 дюйма

Ниже, в тексте документа обозначения параметров некото-
рых макросов содержат знак +, например: .sx +N. Это озна-
чает, что данный параметр является числовым и может быть
использован, как со знаком (+ или -) так и без него. Исполь-
зование без знака, соответствует присваиванию абсолютного
значения, некоторому числовому регистру, а со знаком, прира-
щению значения этого регистра (соответственно положительному
или отрицательному).

1. Разбиение текста на параграфы

Макросы этого раздела, используются для разбиения
текста на параграфы. Стандартным макросом для задания
параграфа является .pp; остальные используются для задания
параграфов специальных видов.

Первый вызов любого макроса из этого раздела или вызов
макроса .sh (см. следующую главу) инициализирует макропро-
цессор. После инициализации нельзя использовать ни один из
следующих запросов: .sc, .lo, .th, .ac. Кроме того после
инициализации, неопределен эффект от изменения параметров,
определяющих режим форматирования страницы (в особенности
длины страницы и границ верхнего и нижнего колонтитулов),
поэтому подобных действий следует избегать.

.lp Начать параграф выровненный по левому краю.
Центрирование текста на странице и подчерки-
вание выключаются если эти режимы были уста-
новлены, устанавливается шрифт \n(pf [1] раз-
мер символов устанавливается равным \n(pp
[10p], перед параграфом пропускается интервал
шириной \n(ps [0.35v в troff'е, 1v или 0.5v в
nroff'е в зависимости от разрешающей способ-
ности устройства]. Весь параграф сдвигается


- 2 -










от левого края на величину \n($i [0] плюс
\n(po [0] если только парграф не размещен
внутри некоторого блока. (смотри .ba). По
крайней мере две первые строки параграфа раз-
мещаются вместе на одном странице.

.pp Аналогичен .lp, за исключением того, что
делает абзацный отступ величиной \n(pi [5n].
Это стандартный макрос для задания параграфа.

.ip T I Смещенный вправо параграф с подзаголовком.
Текст этого параграфа смещен от левого края
дополнительно на I пробелов (или \n(ii [5n]
пробелов если I не задано), по сравнению с
несмещенным параграфом (таким как например
.pp). Основной текст параграфа выровнен по
своему левому краю, подзаголовок располага-
ется T, в левой части первой строки параг-
рафа. Если подзаголовок T не умещается в
левой части первой строки параграфа (с учетом
его длинны и величины сдвига основного текста
параграфа) .ip, то он печатается на отдельной
строке перед первой строкой текста параграфа.
Все пробелы в подзаголовке T должны быть
незаполняемыми.

.jp T I Вариант .ip, отличающийся от него тем, что
после подзаголовка вставляется знак -. Сме-
щение от левого края хранится в регистре
\n(ji.

.np Вариант .ip, который нумерует параграфы.
Нумерация начинается каждый раз сначала после
вызова макросов .lp, .pp, или .sh. Текущий
номер параграфа хранится в \n($p.

2. Заголовки разделов

Нумерованные разделы подобны параграфам за исключением
того, что номер раздела автоматически создается для каждого
из них. Номера разделов имеют вид 1.2.3. Вложенность раз-
дела определяется количеством чисел, разделенных десятичной
точкой, в номере раздела.

Ненумерованные разделы похожи на нумерованные, за иск-
лючением того, что его заголовок не связывается ни с каким
номером.

.sh +N T a b c d e f Начать нумерованный раз-
дел вложенности N. Если N отсутствует, пред-
полагается текущая вложенность, значение
которой содержится в числовом регистре \n($0.
Значения величин, составляющих номер раздела


- 3 -










содержатся в регистрах с именами, начиная с
\n($1 и кончая \n($6. Перед началом раздела
пропускается интервал шириной \n(ss [1v]. T
печатается в качестве заголовка раздела шриф-
том \n(sf [8] с размером символов \n(sp
[10p]. К "Имени" раздела можно получить дос-
туп через строчный регистр \*($n. Если \n(si
не равно 0, базовое смещение раздела устанав-
ливается равным \n(si умноженным на вложен-
ность раздела, заголовок раздела при этом
располагается с позиции, соответствующей
прежднему базовому смещению (Смотри .ba).
Заголовок раздела можно сдвинуть вправо от
установленной для него границы (независимо от
текста). Эта величина определяется значением
регистра \n(so [0]. После печати заголовка
устанавливается шрифт \n(pf. Если непос-
редственно после вызова макроса sh следует
текст, то он будет расположен за заголовком
раздела и в той же самой строке. Использова-
ние макроса .sh гарантирует, что заголовок
раздела и начало его первого параграфа, будут
размещены на одной странице (всего около 3
строк). Если заданы параметры от a до f, то
номер раздела устанавливается в соответствии
с этими значениями, а не автоматическим уве-
личением одного из разрядов номера на 1.
Если одно из значений от a до f отсутствует,
то соответствующий разряд номера раздела не
переустанавливается. Если же значение соот-
ветствующее одному из этих параметров не
является числовым, то соответствующему раз-
ряду номера раздела присваивается значение 0.
Если T представляет собой символ подчеркива-
ния ("_"), то происходит только изменение
уровня вложенности и номера раздела, базовое
смещение при этом остается неизменным и
ничего не печатается. Это бывает полезно при
приведении в соответствие номеров разделов
различного уровня вложенности.

.sx +N Переход к уровню вложенности N [-1], без
печати номера раздела и заголовка, и без
изменения номера раздела на уровне N.
Результат выполнения такой же, как если бы
был начат новый параграф на уровне вложен-
ности N.

.uh T Ненумерованный заголовок раздела. Заголовок
T печатается в точности по тем же правилам
что и в макросе .sh.




- 4 -










.$p T B N Печатает заголовок раздела. Может быть пере-
определен для печати заголовков в экзотичес-
ком виде. T Собственно заголовок раздела,
передается данному макросу макросами .sh и
.uh. B Номер данного раздела, а N глубина
вложенности данного раздела. Часть парамет-
ров может отсутствовать, например: .sh пере-
дает данному макросу все три параметра; .uh
передает только один первый; .sx передает
три, но первые два из них являются пустыми
строками. Следует проявлять осторожность при
переопределении этого макроса, он довольно
сложный и запутанный.

.$0 T B N Этот макрос вызывается автоматически после
каждого обращения к .$p. Он обычно неопреде-
лен, но может быть использован для автомати-
ческого сбора заголовков разделов и формиро-
вания содержания документа. T заголовок раз-
дела, который только что был напечатан; B
номер раздела; и N уровень вложенности раз-
дела.

.$1 - .$6 Макросы-ловушки, вызываются всякий раз перед
печатью разделов соответствующего им уровня
вложенности. Могут быть переопределены, нап-
ример для того, чтобы пропустить нужное число
строк перед очередным разделом. Эти макросы
вызываются из .$p, поэтому при переопределе-
нии последнего вы можете потерять указанную
возможность.


3. Верхний и нижний колонтитулы

Верхний и нижний колонтитулы автоматически размещаются
на каждой странице. Они печатаются шрифтом \n(tf [3] пунк-
торазмер символов \n(tp [10p]. Каждое из определений колон-
титулов начинает работать со следующей страницы. Трехэле-
ментные колонтитулы должны заключаться в кавычки если они
содержат где-либо два подряд идущих пробела или в общей
сложности более восьми пробелов.

Расположение верхнего и нижнего колонтитулов определя-
ется четырьмя числовыми регистрами. \n(hm [4v] расстояние
от верха страницы до верхнего колонтитула. \n(fm [3v] расс-
тояние от нижнего края страницы до нижнего колонтитула,
\n(tm [7v] расстояние от верха страницы до первой строки
текста на ней. И \n(bm [6v] расстояние от нижнего края
страницы до последней строки, где может располагаться текст.

.he 'l'm'r' Определяет трехэлементный колонтитул, который
будет печататься в верхней части каждой


- 5 -










страницы.

.fo 'l'm'r' Определяет нижний колонтитул, который будет
печататься в нижней части каждой страницы.

.eh 'l'm'r' Определяет верхний колонтитул, который будет
печататься на каждой странице с четным номе-
ром.

.oh 'l'm'r' Определяет верхний колонтитул, который будет
печататься на каждой странице с нечетным
номером.

.ef 'l'm'r' Определяет нижний колонтитул, который будет
печататься на каждой странице с четным номе-
ром.

.of 'l'm'r' Определяет нижний колонтитул, который будет
печататься на каждой странице с нечетным
номером.

.hx Задает отсутствие печати колонтитулов на сле-
дующей странице.

.m1 +N Установить расстояние между верхней границей
страницы и верхним колонтитулом. [4v].

.m2 +N Установить расстояние между верхним колонти-
тулом и первой строкой текста. [2v].

.m3 +N Установить расстояние между нижним колонтиту-
лом и последней строкой, где может быть рас-
положен текст. [2v].

.m4 +N Установить расстояние между нижней границей
страницы и нижним колонтитулом. [4v].

.ep Закончить текущую страницу, не начиная следу-
ющую. Используется для принудительного
выталкивания сносок, для других целей практи-
чески не используется. За этим макросом дол-
жен следовать вызов .bp или конец ввода.

.$h Вызывается на каждой странице для печати
верхнего колонтитула. Может быть переопреде-
лен для печати колонтитулов более сложного
вида (например, многострочных), но при этом
перестают работатЬ макросы: .he, .fo, .eh,
.oh, .ef, и .of, а также макрос .+c печатаю-
щий заголовки глав.

.$f Печать нижнего колонтитула, справедливы те же
замечания, что и для .$h.


- 6 -










.$H Обычно это макрос не определен, он вызывается
при печати верхней части страницы (после
вывода верхнего колонтитула) то есть непос-
редственно перед началом выдачи текста на
очередную страницу. Может быть использован
для размещения на страницы заголовков столб-
цов в двухколоночном режиме и других подобных
целей.

4. Блоки

Перед началом любого блока и после его конца (за исклю-
чением центрированных, плавающих блоков и блоков цитат)
вставляется интервал шириной \n(bs [этот числовой регистр
подобен \n(ps]. Размеры аналогичных интервалов для блоков
цитат и плавающих блоков хранятся в других регистрах. Для
центрированных блоков никакие интервалы по умолчанию вообще
не вставляются. Величина вертикальной разрядки для всех
блоков за исключением центрированных блоков и блоков цитат
хранится в регистре \n($R, а не в регистре \n($r.

.(l m f Начать список. Списки представляют собой
текст печатаемый через один интервал, в
режиме без заполнения. Если параметр f имеет
значение F, список будет печататься в режиме
с заполнением. Если параметр m [I] равен I
список сдвигается вправо на \n(bi [4n] пробе-
лов; если он равен M, то список печатается по
левой краю страницы; если он равен L, то спи-
сок печатается с тем же базовым сдвигом, с
которым печатается основной текст. (отличие
от M проявляется только в том случае, если
базовое смещение, хранимое в \n($i и устанав-
ливаемое с помощью .ba, не равно 0); если же
указанный параметр равен C, то каждая строка
списка центрируется по отдельности. Список
печатается шрифтом \n(df [0]. Список обяза-
тельно должен закрываться макросом .)l. Блок
типа список очень похож на блок типа .(b за
исключением того, что не производится попытка
разместить его весь целиком на одной стра-
нице.

.)l Конец списка.

.(q Начать цитату. Это блок печатается через
один интервал, с заполнением и сжат с обеих
сторон по сравнению с основным текстом на
величину \n(qi [4n]. Перед началом блока и
после него пропускается интервал шириной
\n(qs [подобен регистру \n(bs], текст блока
печатается символами размером \n(qp [на один
"пункт" меньше окружающего текста].


- 7 -










.)q Конец блока цитат.

.(b m f Открыть простой блок. Простой блок представ-
ляют собой текст, который по возможности раз-
мещается целиком на одной странице (подобные
блоки необходимы для печати таблиц и рисун-
ков, которые не следует разрывать, если по
тексту они попадают на конец страницы). Если
блок не умещается на текущей странице, то
откроется новая страница, если только при
этом не потребуется пропустить более \n(bt
[0] пустых строк. Если \n(bt равно нулю, то
проверка на число пропускаемых пустых строк
не выполняется. Печатается без заполнения,
если только параметр f не равен F, что вклю-
чает режим заполнения. Блок будет печататься
с отступом равным базовому сдвигу окружающего
блок текста, если m равен L, или будет сдви-
нут вправо от текста на \n(bi [4n], если m
равно I или отсутствует, или будет центриро-
ван (каждая строка отдельно), если m равно C,
или же будет сдвинут к левому краю страницы,
если m равно M. Блок печатается шрифтом
\n(df [0].

.)b Конец простого блока.

.(z m f Открыть плавающий блок. Этот макрос подобен
.(b за исключением того, что его текст всегда
помещается в конце текущей страницы или в
начале следующей. Таким образом, местополо-
жение этого блока чувствительно к вносимым в
текст изменениям. Перед началом плавающего
блока и после его завершения вставляется
интервал шириной \n(zs [1v]. Кроме того,
значение параметра м по умолчанию предполага-
ется равным M.

.)z Конец плавающего блока.

.(c Начать центрированный блок. Последующий
текст центрируется, как одно целое, а не каж-
дая его строка в отдельности, как при исполь-
зовании .(b C. Этот блок может быть вложен
внутрь других блоков.

.)c Конец центрированного блока.

5. Накопление текста для последующей выдачи

.(d Открыть блок задержанного текста. Этот текст
не печатается в том месте документа, где он
непосредственнно расположен, а сохраняется с


- 8 -










помощью механизма отведений. Его можно рас-
печатать впоследствии, используя макрос .pd,
в виде похожем на страничные сноски.

.)d Конец задержанного текста. Числовой регистр
задержанного текста \n($d и соответствующий
ему строчный регистр \*# увеличиваются на 1
при обращении к \*# между двумя блоками
задержанного текста.

.pd Печать задержанного текста. Весь текст
накопленный с помощью команд .(dи .)d форма-
тируется и печатается. Этот макрос может
использоваться в конце каждой главы.

.(f n Открыть текст страничной сноски. Текст стра-
ничной сноски перемещается вниз текущей стра-
ницы и печатается шрифтом \n(ff [1] с разме-
ром символов \n(fp [8p]. Каждой сноске пред-
шествует интервал шириной \n(fs [0.2v].
Сноска печатается со сдвигом \n(fi [3n] от
левого края страницы, и со сдвигом \n(fu [0]
от правого края. Eсли в качестве параметра
задан символ подчеркивания, то сноска печата-
ется без сдвига от левого края страницы.
Страничные сноски всегда печатаются в однко-
лоночном режиме. Если текст сноски полностью
не умещается на текущей странице, то он про-
должается на следующей.

.)f Конец страничной сноски. Числовой регистр
\n($f и соответствующий ему строчный регистр
\** увеличиваются на 1 если к ним имеется
обращение. Если желательно, чтобы на каждой
странице была своя внутренняя нумерация сно-
сок, начинающаяся с 1, следует определить
макрос .$H так, чтобы он содержал следующую
последовательность команд:

.nr $f 1 1
.ds \\*[1\\*]\k*


.$s Макрос печатающий линию-разделитель для стра-
ничных сносок. Может быть переопределен для
задания другой длинны этой линии или для
печати разделителя иного вида. Макрос в его
текущем состоянии печатает линию длинной 1.5
дюйма.

.(x x Открыть индексированный текст. Индексирован-
ный текст записывается и хранится в индексе x
[x] до тех пор пока не будет напечатан с


- 9 -










помощью макроса .xp. Каждому индексирован-
ному тексту предшествует интервал шириной
\n(xs [0.2v]. Каждый индексированный текст
"сдвинут влево" от правой границы страницы на
\n(xu [0.5i]; этот регистр содержит размер
поля, выделяемого от правого края страницы
для печати параметров макроса (в частности
номера страницы).

.)x P A Закончит индексированный текст. Индексиро-
ванный текст заканчивается линией из точек со
строкой A [пустая строка] прижатой к правому
краю страницы (например имя автора статьи), и
строкой P перед ней [\n%]. Если присутствует
параметр A, должен присутствовать и параметр
P. \n% можно использовать для печати теку-
щего номера страницы. Если P символ подчер-
кивания, то ни линия из точек, ни номер стра-
ницы не печатаются.

.xp x Напечатать индексированный текст x [x].
Индексированный текст форматируется с учетом
параметров (шрифт, размер символов и т.д.)
установленных в том месте, где он печатается,
а не тех, которые были установлены во время
накопления текста.

6. Вывод по колонкам

.2c +S N Переход в двухколоночный режим. Расстояние
между колонками устанавливается равным +S
[4n, 0.5i для печати в стиле ACM] (это значе-
ние хранится в \n($s) Ширина колонки вычис-
ленная исходя из ширины страницы и расстояния
между колонками, хранится в \n($l. Номер
текущей колонки записан в \n($c. Чтобы
узнать во сколько колонок будет печататься
текст следует посмотреть содержимое регистра
\n($m [1]. В общем случае данный макрос
устанавливает вывод в N [2] колонок.

.1c Возвращение в одноколоночный режим.

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

7. Шрифты и размеры

.sz +P Пукнкторазмер символов устанавливается равным
P [10p], пропорционально ему устанавливается


- 10 -










и межстрочный интервал. Отношение величины
интервала к пункторазмеру хранится в регистре
\n($r. Аналогичное отношение используемое
внутри блоков и сносок хранится в регистре
\n($R (оно не используется при обращениии к
макросу .sz).

.r W X Печатает текст W обычным шрифтом, и непос-
редственно за ним текст X ранее установленным
шрифтом. Для задания более сложного управле-
ния шрифтами можно использовать в качестве X
управляющую последовательность \c. Если
параметры отсутствуют, то обычный шрифт уста-
навливается текущим.

.i W X Печатает текст W курсивом, и непосредственно
за ним текст X ранее установленным шрифтом.
Если параметры отсутствуют, то курсив уста-
навливается текущим шрифтом. В nroff текст
выделяется подчеркиванием.

.b W X Печатает текст W жирным шрифтом, и непос-
редственно за ним текст X ранее установленным
шрифтом. Если параметры отсутствуют, то жир-
ный шрифт устанавливается текущим. В nroff
текст выделяется подчеркиванием.