//strahinja.org

Groff на српском

[верзија 1.1, 11. фебруар 2021.]

Страхиња Радић
Кратак увод у систем за слагање текста groff и опис начина на који се он може прилагодити раду на српском језику.
Формат Веза
Roff (архива) groff-cir.tar.xz
PDF groff-cir.pdf

Шта је groff?

Groff (GNU troff)1 је имплементација система за слагање текста troff која је написана од нуле у оквиру Пројекта ГНУ. Troff је један од првих система за слагање текста који је још средином шездесетих година XX века развила фирма AT&T за оперативни систем Уникс. Идеја troff-а је слична оној иза TeX-а: документ се уноси у форми изворног кода који осим самог текста садржи и наредбе (у терминологији troff-а: захтеве, „requests“) и макрое. Изворни код се преводи у формат погодан за штампу, обично PostScript или PDF, или се приказује на екрану. Ово је технички различито од текст процесора, као што су Microsoft Word или LibreOffice Writer, који следе принцип WYSIWYG — What you See Is What You Get, односно „што видиш (на екрану), добићеш (и на штампачу)“.

За разлику од TeX-а, groff делује једноставније и брже. Можда најчешћа употреба groff-а је за форматирање man страница. Ово форматирање се врши директно из изворног кода, сваки пут када се позове наредба man (1)!

Пример

Изворни код:

.ce
.ps 12
.ft B
First Document
.ft
.ps
.ce 0
First line
.br
Another line

ће произвести излаз сличан овоме:

First Document
First line
Another line

Проблем Уникода

Форматирање докумената на енглеском функционише тако како је, без додатних интервенција. Проблем настаје чим је потребно да се унесу посебни симболи или текст који није на латиници. Рецимо, уколико покушамо да компајлирамо следећи документ (у стандарду UTF-8)

.ce
Hello! Поздрав!

наредбом (plain.roff је назив фајла у ком смо сачували текст)

$ groff plain.roff > plain.ps

добићемо, вероватно неочекивано:

Hello! ÐоздÑав!

Ако сада позовемо groff са параметром -k, добићемо читав низ грешака сличних овима:

$ groff -k plain.roff > plain.ps
troff: plain.roff:2: warning: can't find special character 'u041F'
troff: plain.roff:2: warning: can't find special character 'u043E'
troff: plain.roff:2: warning: can't find special character 'u0437'
troff: plain.roff:2: warning: can't find special character 'u0434'
troff: plain.roff:2: warning: can't find special character 'u0440'
troff: plain.roff:2: warning: can't find special character 'u0430'
troff: plain.roff:2: warning: can't find special character 'u0432'

Иако groff може да обради текст у формату UTF-8, фонтови који су укључени у стандардну дистрибуцију groff-а не садрже ћириличне знаке, па је неопходно да се употребе фонтови који их садрже.

Инсталација и конвертовање фонтова

Да би groff могао да употреби фонт, он мора бити у посебном формату, који се може добити конвертовањем фонтова у формату PostScript Type 1 програмом afmtodit (1). Цео поступак подешавања вероватно изгледа нетривијално, али сетимо се да је то подешавање неопходно извршити само једном.

У случају да немамо PS Type 1 фонтове, можемо их направити од фонтова у формату TrueType уз помоћ програма ttf2pt1 (1).2 Рецимо, овај документ користи фонтове Fira Sans Condensed и Fira Mono,3 па ћу, илустрације ради, овде описати како се они подешавају за употребу у groff-у. Под неким дистрибуцијама система ГНУ са Линуксом, ови фонтови се налазе у посебним пакетима. Рецимо, у дистрибуцији Artix (а самим тим и Arch), одговарајући пакети се зову ttf-fira-sans и ttf-fira-mono, и можемо их инсталирати наредбама

$ su
# pacman -S ttf-fira-sans ttf-fira-mono

(Под другим дистрибуцијама, пакети и наредба за инсталацију се могу разликовати.) Затим конвертујемо фонтове:

$ mkdir -p font/devpdf && cd font
$ ttf2pt1 -a -e /usr/share/fonts/TTF/FiraSansCondensed-Regular.ttf FiraSansCoR
$ afmtodit FiraSansCoR.afm textmap devpdf/FiraSansCoR

Последње две наредбе поновимо за све фонтове које желимо да употребимо. То ће типично бити фонтови који у називу имају Italic, Bold, BoldItalic, итд.

Након овога, формирамо фајл devpdf/download, који се састоји од редова који повезују назив фонта са називом фајла. Рецимо, за наведене фонтове фајл devpdf/download ће садржати:

	FiraMono-Bold	../FiraMonoB.pfa
	FiraMono-Regular	../FiraMonoR.pfa
	FiraSansCondensed-Bold	../FiraSansCoB.pfa
	FiraSansCondensed-BoldItalic	../FiraSansCoBI.pfa
	FiraSansCondensed-Italic	../FiraSansCoI.pfa
	FiraSansCondensed-Regular	../FiraSansCoR.pfa

Назив фонта можемо добити из самог .afm фајла:

$ grep FontName FiraSansCoR.afm
FontName FiraSansCondensed-Regular
$

Пошто смо овако конвертовали све фонтове, можемо их ископирати у директоријум коме groff може да приступи. Локални фонтови треба да се инсталирају у директоријум /usr/share/groff/site-font, па ћемо имати (из директоријума који смо направили):

$ su
# mkdir -p /usr/share/groff/site-font
# cp -r * /usr/share/groff/site-font

Сада се тако инсталирани фонтови могу користити у groff-у.

Употреба нестандардних фонтова

Због своје историје, groff има специфичан систем рада са фонтовима. Број фонтова који могу да се користе је ограничен, и они се додељују бројевима. Овај поступак се назива монтирање фонтова, и изводи позивом захтева .fp:

.fp 2 I FiraSansCoI

За фонтове које смо додали имаћемо:

.fp 1 R FiraSansCoR
.fp 2 I FiraSansCoI
.fp 3 B FiraSansCoB
.fp 4 BI FiraSansCoBI
.fp 5 C FiraMonoR
.fp 6 CI FiraMonoR
.fp 7 CB FiraMonoB
.fp 8 CBI FiraMonoB

Укључивањем ових захтева на почетку документа, стандардни фонтови ће бити замењени задатим, па ће сада превођење протећи без проблема.

Коначни облик наредбе

На крају, треба напоменути да текућа верзија подразумеваног „излазног уређаја“ groff-а, ps, и поред овога неће произвести правилан PostScript излаз, па је потребно користити излазни уређај pdf. Коначни облик наредбе за добијање излазног документа је стога:

$ groff -k -Tpdf plain.roff > plain.pdf

чиме се од .roff документа добија .pdf документ.

Лиценца (License)

„Groff на српском“ (Groff in Serbian) by Страхиња Радић (Strahinya Radich) is licensed under CC BY-SA .0. To view a copy of this license, visit https://creativecommons.org/licenses/by-sa/4.0


1. https://www.gnu.org/software/groff/manual/groff.html

2. Доступан на адреси http://ttf2pt1.sourceforge.net.

3. Односи се на PDF облик текста.