tags: software OpenBSD title: Troff author: rpt date: 2023-05-08 aside: Sazba neni zadna legrace aneb zapas s typesettery. Potrebuju vysazet dokument a jako uzivatel, co dava prednost svobodnemu softwaru, nebudu prece sazet v Adobe InDesign. Nelze poprit, ze jde o program neobycejne vsestranny a schopny, ale neni to FOSS a Adobe je banda zlodeju. Jejich produkty jsou predrazene, jejich politika pripravuje uzivatele o jejich praci. Proc? K otevreni uzivatelem vytvorenych dokumentu, zdrojovych souboru, je treba Indesign a jeho licence se musi obnovovat kazdy mesic ci rok. Adobe sice ma IDML (InDesign Markup Language), ale pokud vim, jde otevrit pouze v InDesignu. IDML je v podstate XML, takze je alespon editovatelny. Realisticky je toto vhodne pouze na opravu malych chyb. Zustanme u svobodneho softwaru. Scribus www.scribus.net je pomerne solidni nahrada InDesignu. Pravoverni InDesigneri sice budou zbrblat, ze jim chybi to ci ono, ale par dokumentu jsem v tomto programu vysazel a je zcela pouzitelny. Nesazec ma k dispozici Libreoffice www.libreoffice.org, ale svet wordovskych dokumentu, byt v otevrenem formatu, je pro cloveka od fochu tabu. To je jako pouzivat Malovani namisto Photoshopu. Jenze nasinec se prece nebude zahazovat ani s VYSIWYG programy. Pro nas, unixaky je program dokument sam! Jen je treba napsat zdrojovy soubor v prislusnem jazyce a zkompilovat. Mame tedy nasledujici moznosti. ## Latex Tex tug.org je osvedceny typesetter, jehoz koreny jdou az do sedmdesatych let. Funguje na principu znackovacich jazyku, podobne jako HTML, ale lepsi. Prikazy Texu jsou spise low level. To znamena, ze resi zakladni typograficke prvky, kam, co a jak umistit, coz je pro sazbu neprakticke. Tex umi Knuth-Plassuv algoritmus optimalizujici "vyplneni" odstavcu, tedy sazbu do bloku. Program resi odstavec jako celek a nikoliv po radkach. Sam Donald Knuth, autor Texu, vytvoril radu maker zvanych PlainTex. V podstate jde o nadstavbu Texu. Latex www.latex-project.org je jina sada maker, jejimz autorem je Leslie A. Lamport. Makra pracuji s low level prikazy a tim zjednodusuji praci, nebot se nemusi o spoustu veci starat. Po pravde receno pro sazbu knih, reportu a dalsich dokumentu je Latex asi nejvhodnejsi. Lety provereny, vsestranny, relativne jednoduchy a pritom velmi sofistikovany. Jinak receno sazka na jistotu. Jenze instalace a upgrady jsou peklo. Program Texlive tug.org/texlive, distribuce latexu pro Linux, ma kolem 2 GB, ja pomale pripojeni a malo mista na disku. Navic existuje vic unixy typesetter. ## Groff Kdo pouziva OpenBSD, zna mandoc(1) a mdoc(7) a vi, ze jde o implementaci roff(7) pro tvorbu a zobrazeni man stranek. Roff(7) ma historicky dve implementace: nroff pro vystup do terminalu a troff pro sazbu dokumentu. Jeho moderni implementaci je GNU roff cili groff(1). Groff(1) je oproti Texlive nepatrny programek. Ale sazba v nem neni uplne trivialni. Groff funguje podobne jako Tex, tedy jako low level sazeci program. Pohodlnejsi sazbu zajistuji opet makra, konkretne makro ME, MS nebo MOM. Makra jsou preddefinovana pravidla (vzhled) pro titul, kapitoly, odstavce, poznamky pod carou a dalsi prvky dokumentu. Groff ma velmi jemne typograficke schopnosti, az 1/72000 palce. Na druhou stranu neumi Knuth-Plassuv algoritmus. Nekteri autistictejsi typografove osem tvrdi, ze zarovnavani po radcich je pro ne lepsi nez po odstavcich, protoze stejne musi jednotlive radky odtavce "doladovat". Osobne nemam s Knuth-Plassovym alogritmem zadny problem, ale taky nejsem profesionalni sazec. To vsechno zni sice hezky, ale ma to hacek. Dokonce nekolik. V prve rade Unicode. Groff sice umi Unicode, ale byl implementovan pozdeji a groff v nem neumi "premyslet". Ani zakladni fonty nejsou Unicode, takze pote, co konecne zkompilujete cesky text s prepinacem -Kutf8 a myslite si, ze mate vyhrano, ceka vas zklamani. Vysledny text zobrazuje nektere akcentovane znaky a jine zase ne. To me privadi k dalsimu problemu a tim jsou fonty. Groff vyzaduje velmi specificky fontovy format, TTF ci OTF fonty nezna. Nastesti Peter Schaffter, autor makra MOM, naprogramoval skript www.schaffter.ca/.../mom-05.html#install-font, ktery tuto konverzi obstara. Funguje i na OpenBSD, ale pozor, je to bash skript, zatimco defaultni shell v OpenBSD je ksh(1)! Pak je treba ve zdrojovem dokumentu zmenit font, coz obstara vicemene jedna radka. Vysledkem je cesky text. Konecne! Pokud jde o zminena makra, testoval jsem MS a MOM. MS je standardni groffovske makro na sazbu dokumentu typu kniha, report apod. Cili na technicke papiry, nikoliv beletrii, ale zakladni vzhled, jenz produkuje, neurazi. Pro sazbu beletrie je ovsem vhodnejsi makro MOM www.schaffter.ca/.../mom-01.html, jehoz autorem je zmineny Peter Schaffter. Velmi doporucuju jeho stranky, Schaffter je zaniceny groffista a makro MOM se v mnoha ohledech vyrovna Latexu. Nicmene jsem "neprepral" nektere potize a zbabele jsem prchnul k dalsi implementaci troffu, o ktere bude rec za chvili. Makro MOM je skutecne lepsi, ale nepodarilo se mi rozchodit zarovnani do bloku a nektere dalsi ficury. Pomerne rychle jsem ztratil trpelivost, ale jinak to byl uspech, nebot pri poslednim pokusu jsem uvizl na problemu fontu, o kterem jsem psal vyse. ## Neatroff Mluvil jsem o zbabelem uteku, ale zadny unixak se nebude stydet za to, ze pouziva neatroff. Autorem teto nejunixovejsi verze troffu je Ali Golami Rudi litcave.rudi.ir z Iranu, pokud se nepletu. Ali ma na konte hromadu dalsich sikovnych a minimalistickych programku jako neatvi, neatcc nebo fbpdf. Je jednim z tech lidi, co pravdepodobne nepouzivaji Xorg. A odpovida na emaily. Neatroff je napsany v C, umi Unicode, smer textu zprava doleva, ma jednodussi management fontu, vyuziva make(1), vyuziva Knuth-Plassuv algoritmus a patrne nekolik dalsich veci. Neni treba se obtezovat instalaci, ackoliv i s ni se pocita. Osobne preferuju mit slozku neatroff_make mezi skripty (adresar se skripty je soucasti PATH). Staci tedy naklonovat Git na prislusnem miste, zkompilovat nejprve neatroff a pak demo dokumenty (PDF). Adresar s demo dokumenty obsahuje take vzorovy Makefile, ktery je treba vzdy nakopirovat do slozky se sazenym dokumentem a prislusne upravit. Ke kompilaci sazeneho dokumentu pak postaci pouhe make. Neatroff se pritom nijak zasadne neodklani od groffu. Programatori obou systemu jsou v kontaktu, jak jsem zaznamenal kdesi v mailing listech. Proto i v neatroffu lze pouzivat makro MS. Mam dojem, ze je mirne upravene, ale zasadni rozdil jsem nezaznamenal, coz ale muze byt dano tim, ze jsem dosud vyuzil jen zlomek funkci makra. Vsechny potize, ktere jsem mel s groffem se najednou vyparily a navic mi neatroff pripada sviznejsi. Neatroff pry umi "pouze" 1/720 palce, pokud jde o management detailu v dokumentu. Asi s tim dokazu zit. ## Zkusenosti Jsem zacinajicim uzivatelem roffovske rodiny typesetteru a zatim je to dobra zkusenost. Pripada mi, ze potencial roffu je podobny jako u Texu, ale nevyuzity. Latex je velmi pokrocile makro a je znat, ze se mu dostava mnohem lepsi pece. Groff, byt nejznamejsi implementace roffu, ma hodne omezeny pocet uzivatelu a jeho vyvoji se venuje uzka skupina programatoru. Neatroff je a asi i zustane one-man-show, takze budoucnost ma spis groff. Na druhou stranu, groff by potreboval modernizovat, coz je u tak stareho programu vzdycky problem, vzhledem ke zpetne kompatibilite. Mezi vyhody groffu pocitam i makro MOM, ktere nelze v neatroff pouzit. Alespon se domnivam, ze ne, ale mohu se mylit. Groff je GNU standard, to je dalsi nezanedbatelna vyhoda. Kdyby se podarilo groff modernizovat ve stejnem duchu, jako je koncipovan neatroff, nemel bych s nim vubec zadny problem. Syntax je ponekud nezvykly. Prikazy se pisou vzdy na zacatek radku, kde stoji bud osamocene nebo pred textem, jak se slusi na Unix, a zacinaji teckou. To plati paradoxne i pro typografii uvnitr radku, takze zmenu rezu na tucny ci kurzivu u jednotlivych slov je treba provest na nove radce.[1] I tak je zdrojovy dokument stale dobre citelny. Zatim jsem nezalamoval obrazky, ani nesazel tabulky. Nicmene neprijemne prekvapeni neocekavam. ## Texinfo Na zaver chci zminit dalsi program z dilny GNU, o kterem jsem vedel, ale nikdy jsem ho nepouzil. Az donedavna. Je to namet na dalsi povidani, ale svou pozitivni zkusenost zminim uz nyni. Texinfo je GNU program na tvorbu manualu. Je to obdoba man(1), ale sofistikovanejsi. Jde o dnes jiz stary znackovaci jazyk, ktery ma leccos spolecneho s roffem ci spis latexem. Idea je mit jeden zdrojovy soubor, source code, chcete-li, a nekolik vystupnich formatu. Temi jsou v tuto chvili terminal, HTML a PDF. Pro vystup do PDF pouziva jakousi latexovou knihovnu, HTML generuje patrne sam. Vystup do terminalu se provadi s pomoci prikazu info a v tomto vystupu funguji odkazy, podobne jako v HTML. To umoznuje mit k dispozici komplexni, hierarchicky usporadany manual, kde je mozne vyhledavat. Texinfo je soucasti Emacsu a mnoho dalsich GNU programu ma mimo standardni man stranku take texinfo manual. Protoze vec, na ktere pracuju, by mohla mit i webovou verzi, na okamzik jsem texinfo jako zdrojovy kod zvazoval. Nakonec jsem od tohoto napadu upustil, ale jedinym duvodem bylo mit nadstandardni kontrolu nad sazenym textem, coz umoznuje jedine typesetter. Web je pro mne v tomto pripade podruzny. Naopak s uspechem pouzivam texinfo na dokumentaci v praci, vcetne weboveho vystupu. Na myslenku pouzit texinfo me privedl tento chlapik www.stargrave.org/index.html, ktery z nej generuje svuj web. Velice silne uvazuju o tom, ze zacnu psat sve poznamky v tomto formatu. Znamenalo by to zahodit markdown, ale to by me asi netizilo, nebot jsem na nej uz mnohokrat nadaval. Odrazuje me pouze mnozstvi prace s tim spojene a jednoduchost stavajiciho systemu textovych souboru a standardnich unixovskych nastroju jako grep(1) ci find(1). ~~~~~~~~ 1. To plati pro makro MS. U MOM je to jinak, tam slovo zustava uvnitr radku a uzavre se mezi dva tagy.