ФОРМАТИРОВАНИЕ ТЕКСТОВ С ИСПОЛЬЗОВАНИЕМ УТИЛИТЫ NROFF
Пивоваренок Т. А., Суперкомпьютерный Центр
Форматор
nroff позволяет управлять процессом форматирования текстов, в частности задавать размер страницы, длину строк и интервал между строками, а также делать отступы и выполнять табулирование. Можно также устанавливать режим с заполнением строк (с выравниванием по правому краю). Программа
nroff предназначена для обычных печатающих устройств.
Данные, передаваемые для обработки nroff содержат текст документа и инструкции (или запросы), описывающие, в каком виде должен быть распечатан этот текст.
Запросы форматора nroff, начинаются со специальной -точки ( . ) и должны быть записаны строчными буквами в отдельной строке и с первой позиции. Форматирующие макрозапросы вставляются прямо в текст документа.
Простейшая форма команды nroff
% nroff [ option ] ... [ file ]
Вызов команды nroff с использованием макропакета MS
% nroff -ms file
- -ms - Использовать макропакет ms ;
- -np - Начало номера страницы (установить номер первой страницы = p);
- -op - Специальные страницы (распечатать только страницы с номерами, заданными в списке p);
- -sn - Остановка вывода между страницами (делать останов после печати каждых n- строк);
- -Tname - Определение печатающего устройства.
Останавливать печать после каждой страницы:
% nroff -s text | lpr
Oстанавливать печать каждой 3-й страницы:
% nroff -s3 text | lpr
Начать печатать на стр. 11 :
% nroff -n11 text | lpr
Напечатать только страницу 7:
% nroff -o7 text | lpr
Напечатать страницы 3, 9 и 18:
% nroff -o3,9,18 text | lpr
Напечатать страницы с 11-13 и 22:
% nroff -o11-13,22 text | lpr
Напечатать страницы с 1-5:
% nroff -o-5 text | lpr
Напечатать страницы от 14 до конца документа:
% nroff -o14- text | lpr
- .pl - длина страницы;
- .ll - длина строки;
- .po - отступ страницы;
- .pn - номер страницы;
- .bp - смена страницы;
- .ne - дополнительное требование (сохранение целостности строк);
- .sp - вывод пустой строки;
- .cen - центрировать строку или n -строк;
- .ul - подчеркнуть заголовок;
- .cu - непрерывное подчеркивание;
- .tin - временный отступ;
- .br - переход на следующую строку;
- .in n - сделать отступ на n - позиций.
Остановимся немного подробнее на некоторых основных запросах nroff и рассмотрим некоторые базовые встроенные в nroff команды (или запросы) используемые при работе nroff.
Запрос .pl устанавливает размер страницы которая печатается построчно (высота каждой строки 0.4 см). По умолчанию страница содержит 66 строк (28 см).
Пример:
1. Установить размер страницы 24 строки будет выглядит так:
.pl 24
2. Уменьшить размер страницы на 12 строк
.pl-12
3. Восстановить размер страницы
.pl
4. Установить размер строки 132 символа
.ll 132
5. Увеличить длину строки на 12 символов
.ll+12
6. Восстановить размер строки
.ll
7. Установить отступ страницы 8 символов
.po 8
8. Уменьшить отступ страницы на 2 символа
.po -2
9. Восстановить прежнее значение
.po
1. Установить номер страницы 27
.pn 27
2. Увеличить номер страницы на 2
.pn +2
Если вы хотите, чтобы конкретный текст начинался с новой страницы, поставьте одну из следующих команд:
- .bp - начать новую страницу здесь;
- .bp 21 - начать новую страницу здесь и назвать ее 21;
- .bp +2 - начать новую страницу и увеличить номер страницы на 2.
Возможны случаи, когда нежелательно разбивать на части некоторый текст, тогда используйте запрос
.ne
Например: сохранить на странице следующие 7 строк
.ne 7
Если в текст нужно ввести некоторый комментарий:
\" текст
Далее мы остановимся на использовании макропакета MS. Командная строка:
% nroff -ms [ options ] file
Чтобы помочь начинающим пользователям и обеспечить стандартные наборы форматов, проектировщики создали стандартные средства, называемые макропакетами. Наиболее известными пакетами являются MS, ME и MM. Кроме того существуют несколько препроцессоров, которые обрабатывают специальные типы текстов:
tbl - для таблиц;
eqn и neqn - для математических выражений.
Существуют утилиты:
checked - для проверки работы препроцессоров eqn и neqn ;
deroff - для удаления всех форматирующих команд ( nroff , tbl , eqn , neqn ).
Макропакет MS запускается с помощью опций в командной строке nroff.
% nroff -ms [ options ] file ...
Препроцессоры такие как tbl (для таблиц) eqn и neqn (для математических выражений), активизируются отдельными командами, которые посылают текст в nroff через конвейер, например:
% tbl file | nroff -ms
Макропакет MS предоставляет широкий выбор заранее определенных средств форматирования текста, которые вы можете активизировать и дезактивизировать, помещая встроенные команды (или запросы) в свой файл.
Каждая встроенная команда MS (или запрос) состоит из точки в колонке 1, за которой следует одна или две прописные буквы (этим отличаются данные команды от команд nroff, которые записаны строчными буквами). Ниже рассмотрим некоторые форматирующие команды более подробно.
Стандартный раздел смещает первую строку на 5 пробелов и выравнивает все строки по правому краю.
Чтобы сформировать раздел без отступа со строками, выровненными слева и справа (кроме последней) поставьте перед первой строкой команду
.LP
Чтобы выделить цитату т.е. образовать раздел, выделенный пятью пробелами слева и справа, причем все строки выровнены по левому краю и по правому.
Чтобы сформировать раздел, выделенный пятью пробелами слева, а все строки выровнены по левому и правому краям, поставьте перед первой строкой команду
.IP . Пример:
Input Output
.LP
ssssssssssssssssss ssssssssssssssssssss
ssssssssssssssssssssssss ssssssssssssssssssss
ssssssssss sssssssssssssss
.IP
ddddddddddddddddddd ddddddddddddddddddd
dddddddddddddd ddddddddddddddddddd
ddddddddd ddddddddd
Чтобы поместить короткую строку (например: число или метку) перед первой строкой раздела, оставьте один пробел после команды .IP и наберите необходимую строку.
Input Output
.IP (1)
ccccccccccccccccccccc (1) ccccccccccccccccccc
ccccccccccccc ccccccccccccccccccc
cccccccccccccccc cccccccccccc
Чтобы поместить более длинную строку перед смещенным разделом, оставьте один пробел после команды .IP , а затем наберите строку, за которой следует число (которое должно быть по крайней мере на единицу больше длины строки). Это число показывает, на сколько колонок следует сдвинуть (отступить) раздел. Если строка содержит пробелы, заключите ее в кавычки:
Input Output
.IP "Part 1" 8 bbbbbbbbbbb
jjjjjjjjjjjjjjjjjj Part 1 jjjjjjjjjjjjjjjjj
jjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjj
jjjjjjjjjjjjjjjjjjjj jjjjjjjj
Когда задано число, указывающее отступ, это указание остается в силе до тех пор, пока не будет изменено.
Команда
.RS используется совместно для сдвига разделов вправо и влево на 5 позиций. Запрос
.RS также позволяет вставлять строку перед первой строкой раздела.
- Ненумерованные заголовки. Чтобы получить обыкновенный ненумерованный заголовок длиной менее одной строки, поставьте перед ним команду .SH , а за ним команду .LP или .PP , чтобы отменить начало следующего текста. Заголовок будет подчеркнут, выровнен по левому краю и отделен от обычного текста сверху и снизу пустыми строками.
- Нумерованные заголовки. При использовании команды .NH оставить пробел справа команды и набрать число, указывающее уровень подчиненности (до 5 уровней). В заголовке 1-го уровня число можно опустить. Тогда средство MS приписывает следующий допустимый номер на любом данном уровне. Например:
.NH
The Main Thing 1. The Main Thing
.NH 2 1.1. Where to Start
Where to Start 1.2. When to start
.NH 2 1.2.1. The best Time
When to Start 1.2.2. The Worst Time
.NH 3 2. Other
The Best Time
.NH 3
The Worst Time
.NH
Other...
.LP
Стандартное сохранение. Иногда встречаются строки текста, которые желательно хранить вместе на одной странице и вы хотите получить гарантию, что они не будут разъединены при смене страницы. Заключите текст между двумя запросами:
.KS и
.KE
и тогда команда nroff сохранит их вместе.
Установка сноски при помощи запросов:
.FS и .FE
Нужно набрать сноску справа от символа ссылки на нее и между командами сноски .FS и .FE . Средства пакета MS выделят место для примечания в конце страницы и напечатают разделитель между сноской и последней строкой основного текста. Пример:
.QP "I'n not a crook"*
"I'n not a crook"* .
.FS .
*Report,1974 .
.FE -----------------
.PP *Report, 1974
Если вы хотите выделить текст в разделе путем его подчеркивания, то вставьте команду
.I и .R
Пример:
.PP
Now we are coming to the Now we are coming
.I to the __most important_
most important item of the agenda.
.R
item of the agenda.
Лучшим способом отменить выделение текста в вашем документе является выход из него. Никакой команды форматирования не требуется.
При помощи команд:
.DS и .DE
1. Стандартный вывод иллюстрации
Чтобы вывести иллюстрацию в виде текста т.е. сделать отступ и выровнять строки по левому краю вы можете воспользоваться командами .DS и .DE .
.PP
sssssssssssssssss sssssssssssss
ssssssssssssss ssssssssssssssssss
sssssssss sssssssss
.DS
ddddddddddddddddd ddddddddddddddddd
ddddddddddd ddddddddddddddddd
dddddddd dddd
.DE
2. Сблокированная иллюстрация
Команда: .DS B
Чтобы вывести текст с отступом и так, чтобы иллюстрация располагалась в центре экрана, добавьте к команде .DS опцию B :
.PP
sssssssssssssssssssss sssssssssssssssssssss
sssssssssssssssss ssssssssssssssssssssssssss
sssssss sssssssss
.DS B
dddddddddddddddd ddddddddddddddddd
dddddddddddd ddddddddddddddddd
ddddddddd ddddddddddddd
.DE
3. Центрированная иллюстрация
Команда: .DS C
Чтобы центрировать при выводе каждую строку текста добавьте опцию С к команде .DS .
.DS C
.
.текст
.
.DE
Команда:
.ND
Если вы хотите изменить дату, поместите команду .ND рядом с началом текстового файла. Если вы хотите использовать некоторую дату, отличную от текущей, введите команду: .DA , набрав желаемую дату после .DA
.DA September 15, 1994
Заголовок (особая строка над текстом вверху страницы) обычно остается в документе фиксированным. Вы можете поместить текст заголовка, на всех страницах в любую из трех позиций этой строки: в левый край, по центру, в правый край. Для каждой из этих позиций команда
nroff имеет соответствующую строковую переменную.
- .LH (левый заголовок);
- .CH (центрированный заголовок);
- .RH (правый заголовок)
по умолчанию переменная .CH содержит номер страницы, а две другие ничего не содержат. Чтобы изменить любую из этих переменных, используйте команду nroff .ds (определить строку). Пример:
.PP
.ds LH Draft Copy
.ds RH Revision 3
В данном случае мы заголовок текста Draft Copy поместим слева, а Revision справа и номер страницы разместим в середине.
Футер - особая строка под текстом внизу страницы. Вы можете поместить в любую из трех позиций этой строки:
- .LF - левый край;
- .MF - центр;
- .RF - правый край
Пример:
.PP
.ds LF Confidential
.ds RF Internal Use Only
Команда
nroff помещает номер страницы в середине заголовка по умолчанию.
.PP
.ds RF Page %
номер страницы помещается с правой стороны футера и ему предшествует слово Page.
Если вы хотите разместить текст в более узких колонках, можно отпечатать документ в двухколонном формате с помощью команды
.2C из текста
ms . Затем использовать команду
.1C , чтобы вернуться к одноколонному формату:
.2C
.LP
ddddddddddddddddddd dddddddddd dddddddddd
ddddddddddd dddddddddd dddddddddd
ddddddddddddddddddddddd. dddddddddd dddd.
.1C
.LP
sssssssssssssssss sssssssssssssssssssssss
sssssssssssssssssss sssssssssssssssssssssss
sssssss. ssssssssss.
Есть еще способ быстрого получения двухколонного формата. Чтобы быстро получить пример двухколонной печати, сделайте копию своего файла (например: disk ) и назовите его disk.2C , затем начните сеанс редактирования с файлом под именем disk.2C и добавьте нужные запросы. Когда запросы на форматирование вставлены в соответствующее место, выполните следующую командную строку:
% nroff -ms disk.2C | col
ваш текст будет распечатан в два столбца.
1. Для формирования разделов:
- .PP - стандартный раздел;
- .LP - раздел без отступа;
- .QP - раздел цитат;
- .IP - смещенный раздел;
- .RS - сдвиг вправо;
- .RE - сдвиг влево.
2. Для непрерывного вывода текста на экран:
- .DS (.DE) - стандартный вывод;
- .DS B (.DE) - сблокированный вывод;
- .DS C (.DE) - центрированный вывод.
Тексту должна предшествовать одна из перечисленных выше команд, а за текстом должна находиться команда завершения ( .DE ).
3. Сохранение непрерывного следования строк текста на странице:
- .KS (.KE) - стандартное сохранение
4. Использование сносок для печати в конце страницы.
- .FS (.FE) - установка сноски;
- .\u (\d) - использование подчеркивания.
5. Использование заголовков (для печати заголовков):
- .SH - ненумерованные заголовки;
- .NH - нумерованные заголовки.
6. Выделение текста (отмена выделения):
запрос .I производит подчеркивание для выделения.
7. Разметка страниц.
Стандартная разметка страницы для ms есть область печати размером 12х22.5 см на стр. размером - 17х27.5 см., причем в центре вверху помещается ее номер, а в середине строки в конце страницы помещается дата. Используя следующие команды, вы можете сделать некоторые изменения в разметки:
- .ND - удалить дату;
- .DA - изменить дату;
- .ds LH , .ds CH , .ds RH - Изменить заголовок
- .ds LF , .ds CF , .ds RF - Изменить футер
- % - переместить номер страницы;
Стандартный формат страницы при использовании макропакета MS
< Drawing or tabular insertion skipped...>
Программы
neqn (для обработки математических формул) и
tbl считывают текст из файла стандартного ввода и записывают переработанный текст в файл стандартного вывода. Обрабатываются только участки входного текста, заключенные между парой определенных запросов, остальной текст копируется без изменений. Командная строка выглядит следующим образом:
tbl [ files ] ...
tbl file | nroff -ms
Препроцессор tbl воспринимает простое описание таблицы и генерирует запросы nroff для печати этой таблицы. Запросы препроцессора tbl помещаются между запросами .TS (начало таблицы) и .TE (конец таблицы).
.TS
.
.
- описание таблицы
.
.TE
Литеры ; (точка с запятой) и . (точка) должны присутствовать явно, завершая соответствующий раздел. Формат столбцов и строк в общем случае задается шаблоном. Литера Т (табуляция) служит разделителем столбцов: Пример:
.TS
center;
c s s s
c c c c
l l n n.
Отделения фирмы Bell Labs
Название
Т Адрес
Т Код
Т Номер
................
.TE
В разделе описания форматов можно задавать следующие опции:
- с - элемент столбца центрируется;
- l - элемент выравнивается по левому краю столбца;
- n - числовая величина;
- r - элемент выравнивается по правому краю столбца;
- s - расширенный заголовок. Элемент из предыдущего столбца продолжается и в этом столбце.
Опция center вызывает размещение таблицы посередине страницы. По умолчанию таблица располагается с левой стороны страницы. Внешний вид таблицы задается следующими опциями.
- allbox - поместить каждый элемент таблицы в прямоугольную рамку;
- box - поместить всю таблицу в прямоугольную рамку;
- center - разместить таблицу посередине страницы (по умолчанию таблица будет расположена с левой стороны страницы);
- doublebox - поместить таблицу в двойную рамку;
- expand - разрядка. Использовать для размещения таблицы всю ширину страницы (текущую длину строки);
- tab(x) - в качестве разделителя столбцов использовать литеру х вместо табуляции.
Более подробную информацию вы можете получить в man nroff, tbl , neqn .