Creació de calendaris amb Pcal

Què és Pcal

PCAL és un programa de generació de calendaris que produeixen una sortida PostScript (un avantpassat del pdf, per entendre’ns) senzills i nets.1

PCAL s’utilitza normalment per generar calendaris en format mensual (un mes per pàgina) amb text i imatges incrustades opcionals per marcar esdeveniments especials (per exemple, vacances, aniversaris, etc.). També pot generar calendaris de format anual (un any per pàgina).

Calendari-Gener.png

Figura 1: Calendari generat amb Pcal, pàgina corresponent al mes de gener.

Va ser publicat per Andrew W. Rogers, la pàgina web del qual ha desaparegut. El desenvolupament d’aquesta utilitat es va detenir en la versió 4.11.0 l’any 2011.

Com treballa Pcal?

A partir d’un fitxer de text pla (que podem crear amb el nostre editor de text preferit, és a dir, amb Emacs), on indicarem els dies festius i altres esdeveniments, Pcal genera un fitxer PDF (o PostScript) amb el calendari generat. Aquest fitxer es pot visualitzar en pantalla i es pot imprimir.

Pcal és un programa de terminal; per tant, l’haurem d’executar des de la línia d’ordres per a obtenir-ne el resultat final en PDF.

Dissortadament, Pcal és un programa tant antic que no treballa amb UTF-8. Això vol dir que, si desitgeu un calendari amb una llengua que no siga l’anglés, us caldrà tenir en compte un parell de detalls sobre la codificació del fitxer original (en cas contrari, les lletres modificades, com ara vocals accentuades o ce trencada, no es visualitzaran correctament).

Com s’instal·la Pcal?

Sol formar part dels repositoris de totes les distribucions GNU/Linux, de manera que es pot instal·lar amb el procediment habitual de cadascuna. Per exemple, en les distros de la família Debian, seria suficient amb:

sudo apt-get install pcal

Tanmateix, també el podeu descarregar directament de la web oficial de Pcal.

Un exemple de calendari anual

Imaginem que volem crear un calendari amb les festivitats dels Països Catalans; un punt de partida podria ser un fitxer de text pla amb el següent text:

opt -C "Calendari dels Països Catalans" 


year all
1/1*          Cap d'any
6/1*          Reis

1/3	      Dia de les Illes Balears
14/3*	      Dia de la Constitució (And)
19/3*	      Sant Josep

Easter*	       Pasqua de Ressurrecció
Good_Friday*   Divendres Sant
1st Monday after Easter*    Dilluns de Pasqua
2nd Monday after Easter*   Sant Vicent Ferrer
50rd Day after Easter*	Pentecosta

23/4	       Sant Jordi

24/6*          Sant Joan

1/5*	       Dia del Treball

15/8*	       Assumpció

11/9*	       Diada de Catalunya

9/10*	       Diada del País Valencià
12/10*         Mare de Déu del Pilar

1/11*          Tots Sants

8/12*          Immaculada Concepció
Christmas*     Nadal

26/12*         Sant Esteve

28/12          Dia dels Innocents

Així, imaginem que desem el codi anterior en un fitxer de text pla anomenat any-2023-PPCC.calendari. Com s’indica al text de l’exemple, cal desar el fitxer amb codificació Latin1 o ISO-8859-15 (tots els editors decents permeten fer-ho). Ara, per generar-ne el PDF, obrirem un terminal, anirem al directori on l’havíem desat i escriurem:

pcal -r Latin1 -a ca -P a4 -F1 -B -f any-2023-PPCC.calendari -E 1 2023 12 > any-2023-PPCC.pdf

On els arguments tenen els següents objectius:

  • -r Latin1: indica que la codificació del fitxer és Latin1 o ISO-8859-15;
  • -a ca : idioma català (per als noms dels mesos i dels dies);
  • -P a4 : mida de les pàgines (l’orientació per omissió és horitzontal);
  • -F1 : primer dia de la setmana, dilluns;
  • -B : deixar en blanc (i no en gris) els requadres que no mostren cap dia);
  • -f any-2023-PPCC.calendari : fitxer amb els festius i altres indicacions.
  • -E : format europeu de dates (dia/mes o dia/mes/any);
  • 1 2023 12 : el calendari inicia al gener (1) de 2023 i conté 12 mesos;
  • > any-2023-PPCC.pdf : nom del fitxer de sortida.

Introduir els arguments en el fitxer font

L’ordre per a crear el calendari es pot simplificar molt si introduïm la major part dels arguments a l’inici del fitxer de text que el defineix. Per exemple, podem substituir la primera línia del nostre exemple per les següents:

### OPCIONS

opt -a ca	  # Mesos i dies en català
opt -P a4	  # Mida dels fulls
opt -F 1	  # Primer dia de la setmana: dilluns (1); pot anar de 0 a 6.
opt -B		  # Evita que els requadres sense dia queden en gris.
opt -E 		  # Indica que les dates van en format europeu (d/m/y o d/m)
opt -r Latin1     # ISO-8859-15 (cal desar el fitxer en aquesta codificació)
opt -C "Calendari dels Països Catalans" 

opt -o any-2023-PPCC-NOVISSIM.pdf ##### FITXER DE SORTIDA

Un cop fet això, l’ordre per generar el calendari es reduirà a:

pcal -f any-2023-PPCC.calendari 1 2023 12

És a dir, que només ens caldrà indicar el fitxer a utilitzar (-f any-2023-PPCC.calendari), el mes d’inici del calendari (1), l’any que desitgem imprimir (2023) i el total de mesos que volem (12).

En canvi, si el que volem obtenir és un calendari escolar del setembre al juny, caldria escriure l’ordre:

pcal -f any-2023-PPCC.calendari 9 2023 10

És a dir, caldria indicar que el calendari ha de començar el novè mes i durar deu mesos.

El contingut del fitxer del calendari

Els comentaris

El lector atent ja haurà comprés que, en el fitxer que defineix el calendari, es poden introduir comentaris (línies que no seran tingudes en compte) simplement escrivint un símbol coixinet (#): qualsevol contingut posterior a un coixinet serà ignorat per Pcal (no importa si el coixinet apareix a inici de la línia o no).

Els arguments de la línia d’ordres

Qualsevol argument que es puga incloure en la línia d’ordres per invocar Pcal pot ser traslladat a l’interior del fitxer del calendari, cosa que simplifica la línia a emprar. Només cal iniciar la línia amb les lletres opt i, tot seguit, afegir l’argument normalment.

Tanmateix, hi ha dues indicacions que caldrà seguir mantenint en la línia d’ordes:

  1. la invocació del fitxer del calendari amb -f (-f festes.calendari, per exemple), i
  2. la informació del mes i any d’inici del calendari (si s’omet, només genera el mes actual), seguida de la quantitat de mesos desitjats (si s’omet aquest darrer, només gener un mes).

Indicar esdeveniments i festes

El cos de l’exemple està ocupat per les indicacions per als dies especials.

En general, per indicar un dia, l’identifiquem a l’inici d’una línia amb el format europeu (és a dir, dia/mes, expressats en xifres —perquè vam emprar l’opció -E). Si, immediatament a continuació, marquem un asterisc (*), estarem indicant que és un dia festiu (i, en el calendari, el número del dia apareixerà de color gris en lloc de negre).

També es poden indicar algunes dates anuals emprant-ne el nom en anglés:

  • Good_Friday: Divendres Sant;
  • Easter: Pasqua de Resurrecció;
  • Thanksgiving: Acció de gràcies;
  • Christmas: Nadal.

També n’existeixen els equivalents per al calendari ortodox.

A més a més, sempre en anglés, es poden indicar dades fixes al llarg de l’any:

  • 1st Monday after Easter: primer dilluns després de Pasqua;
  • 2nd Monday after Easter: segon dilluns després de Pasqua (Sant Vicent Ferrer, festiu a València);
  • 50rd Day after Easter*: el cinquantè dia després de Pasqua, és a dir, Pentecosta (que solia ser festiu).

Però també es factible indicar dies en funció del dia concret d’una setmana concreta d’un mes, o de cada mes, o de cada setmana; veiem-ne alguns exemples (inspirats o adaptats del manual de Pcal):

  • Last Sunday in Oct Aplec al Puig ### Darrer diumenge d’octubre
  • All Fridays in Oct Reunió de departament ### Cada divendres d’octubre
  • First workday in all El treball dignifica ### Primer dia laboral ### de cada mes
  • All Monday in all Setmana fiscal %0W ### Cada dilluns ### de cada mes
  • 2nd workday in all Ja en queda menys! ### 2n laboral cada mes
  • 2nd full_moon in all Blue Moon ### 2a lluna plena de l’any
  • Fri on_or_before all 15 Pay Day ### Dv 15 o anterior
  • 183rd day of year Mig any (en queden %l dies) ### 183è dia de l’any
  • Tue after first Mon in Nov Eleccions (USA) ### Dt després del 1r dl nov
  • 20rd Day before Christmas Comprar els regals ### 20è dia abans de Nadal

És a dir, que podem definir avisos recurrents amb expressions com:

  • el segon divendres de cada mes (2nd Friday in all);
  • el darrer dijous de cada mes (last Thursday in all);
  • el tercer dimarts d’octubre (3rd Tue in Oct, emprant només tres lletres).

Com veiem (i no ho hem vist tot), Pcal és molt flexible i potent. A més a més, podem generar més d’una indicació per al mateix dia, cosa pràctica a l’hora d’elaborar calendaris amb indicacions laborals.

Més opcions

Pcal pot fer moltes coses més. Per exemple, pot incloure informació sobre les fases lunars (amb els arguments -m o -M, «moon»), pot mostrar els mesos en vertical (amb -p, «portrait»), pot crear un calendari anual en forma de graella (amb -w). Fins i tot, pot incloure imatges en format EPS (això no ho he provat encara).

Calendari-anual.png

Figura 2: Resum anual creat amb Pcal

Conclusions

Pcal és una eina antiga, però d’una gran potència (com ho solen ser totes les eines basades en text i en el terminal, d’altra banda). Ben flexible, ens permet crear ràpidament calendaris complexos sense perdre’n la claredat. El major inconvenient que li trobe és aquell detall de la codificació (que se supera desant el fitxer com a Latin1 o ISO-8859-1 i aplicant l’argument «-r Latin1», bé en la línia d’ordres, bé en el propi fitxer font).

Notes a peu de pàgina:

1

Accidentalment, he descobert que també pot crear-los en pdf: segons la documentació oficial, Pcal només produeix documents PostScript, amb l’extensió .ps; però, en equivocar-me en escriure una ordre, vaig descobrir que també pot crear, directament, documents en format pdf.

Cookies? Galetes? Bunyols! Aquest blog utilitza bunyols per... bé, us mentiria si us digués que sé per a què punyetes utilitza bunyols aquest blog; a més, els bunyols els posa Wordpress, no jo, que no els vist mai. Però, com que la llei mana que us n'avise, avisats quedeu.
Accepte els bunyols
No vull bunyols, que engreixen!