← Blog

Documents amb groff


[2019-04-19]

Si estàs llegint això és perquè vols oblidar-te del Word i vols trobar una manera més eficient de treballar.

Potser estàs fent un doctorat, o un treball de final de carrera, o potser vols escriure un llibre, o potser a la feina escrius documentació tècnica, i necessites un millor sistema per escriure documents. O potser simplement vols sentir-te deslligat de Microsoft.

Estàs considerant trobar un sistema per formatejar text: vols produir articles o llibres, visualment bonics, de forma consistent i amb alta qualitat. Potser també et preocupa poder escriure equacions matemàtiques de forma bonica i senzilla. Potser fins i tot vols evitar el LaTeX perquè has trobat tanta informació que no saps per on començar.

Evidentment, vols que sigui gratis i de codi obert, perquè vius al 2019, i vols un sistema que transcendeixi el temps i les empreses.

Més endavant, potser voldràs integrar-ho amb git perquè és el millor sistema de control de versions. Potser també voldràs tenir l'opció d'allotjar els documents a una plataforma com ara github, i evitar així l'infern de les versions per mail. A més, t'agradaria tenir la possibilitat de poder treballar de forma col·laborativa amb altres companys de feina.

En definitiva, vols treballar de forma còmoda i augmentar la complexitat quan faci falta, de forma incremental.

Estàs de sort perquè la comanda groff és la peça perfecta: permet produir documents (pdf, ps, etc) formatejats a partir de documents de text. Moltes distribucions Linux i Mac OS X ja el porten instal·lat de sèrie (per posar un exemple, el sistema de manuals d'Unix, man, està fet amb groff).

Si no tens groff instal·lat, obre un terminal i escriu:

  
  $ sudo apt install groff # linux (debian, ubuntu, etc)
  $ brew install groff     # mac os x
  
Ara farem el nostre primer document amb groff.

Crea un nou fitxer anomenat document.ms, fent servir el teu editor de text preferit (vim, emacs, nano, atom...):

  
  .TL
  El meu primer document utilitzant groff

  .AU
  Lluís Bosch

  .AI
  Universitat de Girona

  .AB
  Això és un abstract, una introducció al teu document, freqüent als articles
  científico-tècnics.

  .NH
  Títol del capítol 1

  .PP
  Això és un paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf
  paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf
  paràgraf paràgraf paràgraf paràgraf.

  .NH
  Títol del segon capítol

  .PP
  Això és el segon paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf
  paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf paràgraf
  paràgraf paràgraf paràgraf paràgraf.

  .PP
  Ara veurem unes equacions:

  .EQ
    y = 3 sup x
  .EN

  .EQ
    y = sqrt x over z + 4 over x
  .EN

  .EQ
    y = sum from 1 to N x sup {y - y bar over alpha}
  .EN
  
Compila el document.ms amb la següent comanda:
  
  $ groff -e -t -ms document.ms -K utf-8 -T pdf > document.ms.pdf
  # la opció -e activa les equacions (paquet 'eqn')
  # la opció -t activa les taules (paquet 'tbl')
  # la opció -ms activa el format 'ms' (hi ha diferents formats dins de groff)
  # la opció -K utf-8 ens permet poder escriure accents i símbols extranys
  # la opció -T pdf especifica que volem un .pdf (també es podria generar un .ps)
  
Enhorabona! Així es veu el teu primer document PDF fet amb groff:

Fantàstic. Fins aquí ha sigut molt fàcil, però ara ho sofisticarem una mica. Ara volem que es compili automàticament cada cop que guardem el fitxer document.ms. Hem de crear un fitxer anomenat Makefile per poder utilitzar la comanda make, que també ja hauria d'estar instal·lada:

  
  #fitxer 'Makefile'
  #compilar "document.ms" a "document.ms.pdf"

  document.ms.pdf: document.ms
    groff -t -e -ms document.ms -T pdf -K utf-8 > document.ms.pdf
  
Nota: la tabulació al Makefile és important. Si hi ha espais enlloc d'un tabulador, donarà error.

Ara, comprovem que el PDF es compila correctament quan cridem la comanda make:

  
  $ make
  
La comanda make és intel·ligent i només compilarà si el document.ms conté canvis.

Ara, farem servir la comanda entr per automatizar make. Si no tens entr instal·lat, obre un terminal i fes:

  
  $ sudo apt install entr # a linux (debian, ubuntu, etc)
  $ brew install entr     # a mac os x
  
Ara, executem entr de la forma següent:
  
  $ ls *.ms | entr make
  
Voilà! Ara cada cop que fem un canvi i guardem el document.ms, s'autocompilarà i podrem anar veient els canvis que anem fent. Una vegada ens haguem acostumat a aquest sistema, no tornarem mai més enrere.

El paquet groff conté moltes més comandes que no hem vist en aquest exemple. Per exemple, hem vist que .TL serveix per especificar el títol. Qualsevol cosa que ens poguem imaginar es pot fer amb groff: taules de contingut, bibliografies, gràfics, imatges...

El següent document és una bona introducció (en anglès) per fer qualsevol cosa amb groff: The Groff and Friends HOWTO (evidentment és un document fet amb groff).

Salut!

Lluís