Troff — простой, но мощный текстовый процессор для Linux. Он позволяет легко создавать готовые к печати документы, компилируя исходные файлы из командной строки. В отличие от Латекс Troff невероятно лёгкий и предустановлен в большинстве систем Linux. В этом руководстве показано, как использовать Troff для форматирования PDF-документов в Ubuntu.

Что такое Troff и зачем его использовать?
В основном смысле, Troff Это программа для обработки текста, преобразующая кодоподобный текст в печатные документы. В отличие от текстовых процессоров, Troff не использует модель WYSIWYG. Вместо этого он требует использования определённых типов кода для форматирования.

Одно из главных преимуществ такого подхода — его простота. Базовая установка Troff содержит всё необходимое для создания документа. Более того, отсутствие графического интерфейса пользователя позволяет создавать документы даже по SSH.

Совет: узнайте, как перенаправить Приложения с графическим интерфейсом через SSH в Linux.
Установить Трофф
Troff часто входит в комплект по умолчанию большинства дистрибутивов Linux. Вы можете проверить его наличие в системе, выполнив команду -h. Это выведет на экран краткий список всех флагов, поддерживаемых инсталляцией Troff.
troff -h

В некоторых дистрибутивах Troff по умолчанию не входит в комплект. В этом случае вы можете установить его, выполнив поиск пакета. «Грофф».

Это повторная реализация программ Troff и Nroff от проекта GNU, включающая ряд новых и современных функций.
Установить groff в Ubuntu можно с помощью следующей команды:
sudo apt install groff

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

Этот уровень контроля позволяет вам манипулировать программой для создания документов любого типа. Чтобы упростить этот процесс, разработчики Troff создали «макросы», которые преобразуют эти команды в более простой формат.

Один из самых распространённых макросов в Troff — «milliseconds». Он создаст документ в стиле статьи. Документ в формате «ms» можно создать с помощью команды touch:
touch my-first-document.ms
Поскольку все документы Troff являются текстовыми, вы можете открыть их в текстовом редакторе. В моём случае это Vim. Вы также можете использовать любой из этих текстовых редакторов для Linux.
vim мой-первый-документ.ms

Понимание формата Troff
Все документы Troff имеют схожую структуру. Каждая команда форматирования должна располагаться на отдельной строке внутри форматируемого содержимого. Таким образом, типичный документ Troff будет выглядеть следующим образом:
.COMMAND1 Это фрагмент содержимого документа Troff. COMMAND2 Это другой фрагмент содержимого документа Troff.
Две самые простые команды, которые вы будете использовать за миллисекунды, — это .TL и .PP. Первая преобразует текст в заголовок и выравнивает его по центру документа, а вторая форматирует текст по шаблону абзаца.
Например, в следующем фрагменте используются команды TL и .PP:
.TL Мой первый документ на Troff. .PP Это контент, который я хочу оформить как абзац в моём итоговом документе. Он не очень длинный, но это мой первый документ на Troff, и я им горжусь. Он примерно трёх предложений и должен гармонично вписываться в документ.

Далее создайте документ, передав файл в Troff.
groff -ms -Tpdf ./my-first-document.ms > output.pdf

Совет: Если вы предпочитаете что-то попроще, научитесь Написание в формате MLA в Google Docs.
Создание жирного, курсивного и подчеркнутого текста
Как и в обычном текстовом редакторе, большинство макросов Troff предоставляют ряд команд стилей для настройки документа. В Microsoft это .B, .I, .UL и .BX.
- Команда B делает текст полужирным.
- Команда .I меняет шрифт текста на курсив.
- UL и .BX — это команды, которые рисуют подчеркивание и рамку вокруг текста соответственно.
Подобно командам, указанным выше, использование этих команд в документе требует разделения каждого стиля на отдельной строке:
.TL Мой первый документ Troff .PP Это содержимое .B .R, которое я хочу оформить как абзац в моем окончательном документе. [...]
В этом примере я создал новую строку перед словом "содержание" Я добавил команду .B, чтобы сделать его полужирным, затем создал новую строку и добавил команду .R. Это позволяет Troff вернуться к предыдущему стилю.

Важно отметить, что при изменении стиля всегда необходимо добавлять команду .R. Например, следующий фрагмент не будет заканчиваться командой .I, поскольку Troff не увидел файл .R после неё:
.TL Мой первый документ Troff .PP Это .Я хочу, чтобы это выглядело как абзац в моем окончательном документе. [...]

Создать новые разделы документа
Подобно LaTeX, Troff также поддерживает определение разделов и иерархию, поэтому вам не нужно сортировать и сопоставлять уровень каждого заголовка при редактировании.
Чтобы создать новый раздел в документе, используйте команду .NH, а затем имя заголовка.
.TL Мой первый документ Troff .NH Мой первый заголовок .PP Это содержимое, которое я хочу оформить как абзац в моем окончательном документе.

По умолчанию каждый заголовок Troff имеет значение уровня, которое определяет, как программа будет формировать и отображать его содержимое в итоговом документе. Вы можете изменить это значение, чтобы настроить уровень заголовка.
Например, следующий код создает адрес уровня 2 непосредственно под исходным:
.TL Мой первый документ Troff .NH Мой первый заголовок .NH 2 Мой первый подзаголовок .PP Это содержимое, которое я хочу оформить как абзац в моем окончательном документе.

Помимо обычных пронумерованных заголовков, Troff также может создавать пустые заголовки, которые будут по-прежнему соответствовать иерархии уровня документа.
Для этого замените .NH на команду SH:
.TL Мой первый документ Troff .SH Мой первый заголовок .SH 2 Мой первый подзаголовок .PP Это содержимое, которое я хочу оформить как абзац в моем окончательном документе.

Совет: узнайте, как Изменение полей в Google Docs.
Создание списков в Troff
Простота Troff также позволяет настраивать его поведение в соответствии с вашими потребностями. Например, меню не входят в стандартную комплектацию Troff или макросов MS. Тем не менее, вы всё равно можете создать меню, объединив несколько команд MS.
Каждый список в Troff состоит из трёх частей: отступа, маркера и содержимого. Чтобы создать отступ, используйте команды .RS и .RE. Это увеличит текущий уровень отступа любого текста в списке на четыре пробела.
RS Это мой первый предмет. .RE

Команда IP также позволяет задать маркер и отступ между ним и текстом. В данном случае я устанавливаю маркер «[1]» и добавляю четыре пробела.
.RS .IP [1] 4 Это мой первый предмет. .RE

.RS .IP [1] 4 Это мой первый предмет. .IP [2] 4 Это мой второй предмет. .IP [3] 4 Это мой третий предмет. .RE

Наконец, автоматизируйте этот процесс, создав собственный макрос. Например, следующий фрагмент кода связывает мою IP-команду с QW.
.de QW .IP [-] 4 .. .RS .QW Это мой первый предмет. .QW Это мой второй предмет. .QW Это мой третий предмет. .RE

Создание таблиц с помощью препроцессоров в Troff
Одной из странностей Troff является то, что большинство его функций присутствуют в виде "первоначальные методы лечения"В большинстве случаев это готовые двоичные файлы, которые работают, создавая Скрипты контейнера препроцессора и преобразовать его в низкоуровневый код Troff.

Tbl — отличный пример препроцессора Troff. Это программа для управления таблицами в документе. Базовый контейнер Tbl выглядит так:
.TS allbox ; cc c. item1 пункт2 пункт3 пункт4 item5 item6 .TE
- Команды .TS и .TE сообщают Tbl, что это среда, которую он может читать.
- Вторая строка сообщает программе, как отформатировать эту таблицу.
- Третья строка — это поле, разделенное пробелами, которое указывает размер столбца и выравнивание вашей таблицы.
- Четвертая и пятая строки — это поля, разделенные табуляцией, в которых содержится содержимое вашей таблицы.

Компиляция документа с помощью Tbl немного отличается от компиляции обычного файла Troff. Сначала загрузите файл:
tbl my-first-document.ms > preprocessed.ms
Затем передайте вывод программы в Troff:
groff -ms -Tpdf ./preprocessed.ms > output.pdf
Наконец, автоматизируйте этот процесс с помощью каналов UNIX:
tbl my-first-document.ms | groff -ms -Tpdf > output.pdf

Часто задаваемые вопросы:
В1: Можно ли использовать Troff в Windows?
отвечать. По умолчанию Troff и Groff официально не портированы на Windows. Однако вы всё равно можете использовать Groff с другими инструментами GNU. Установка подсистемы Windows для Linux.
В2: Есть ли в Troff функция отслеживания библиографии?
отвечать. Да. Referencing — это простой препроцессор, который использует внешний файл библиографии для автоматического отслеживания ссылок в документе Troff. Вы можете узнать больше о его работе, посетив страницу руководства, выполнив команду man referencing.
В3: Как исправить ошибку «missing DESC» при компиляции Troff?
отвечать. Эта проблема, вероятно, вызвана отсутствием зависимости в вашей системе или несовместимостью файла версии. Чтобы исправить это, установите соответствующий пакет groff из репозитория вашего дистрибутива.






