Una manera fàcil de combinar correspondència
Ja vam parlar en l’article
Combinar i personalitzar correspondència amb KOMA-Script sobre com crear cartes personalitzades amb el paquet
scrltr2 del conjunt
KOMA-Script . En aquesta ocasió, però, veurem com personalitzar documents de tota mena amb el concurs del potent paquet
datatool.
datatool és capaç de crear una base de dades a partir d’un fitxer CSV, un fitxer de text on els valors estan separats per comes. En un fitxer CSV ben formatat la primera fila conté el nom dels camps separats per comes i cada fila subsegüent és un registre amb els diferents camps.
datatool aleshores importa les dades del CSV i hi treballa amb tota la potència d’una base de dades. La detallada documentació del paquet informa que és capaç de gestionar una base de dades, de crear gràfics circulars, lineals o de barres i de personalitzar documentació.
En aquest article ens centrarem en aquest darrer aspecte i per estudiar el cas hem creat un document d’ajuda al professorat que en la primera part li proporciona informació global sobre les qualificacions dels estudiants en conjunt tot calculant diferents mitjanes de notes. La segona part del document són els butlletins de qualificació a lliurar a cada estudiant. Són pàgines independents personalitzades amb el nom de cada estudiant i llurs qualificacions amb indicació de la mitjana.
Per aconseguir-ho partim d’un fitxer en format CSV
(dades.csv) amb els següents camps:
Nom, Cognom1, Cognom2, Genere, Dni, Email, Assignatura1, Assignatura2, Assignatura3. Aquest fitxer
dades.csv s’importa al document en forma de la base de dades anomenada estudiants amb el comandament
\DTLloaddb{estudiants}{dades.csv}
El comandament que fa la màgia és
\DTLforeach{nombasedades}{assignacions}{text}
perquè per cada registre, cada fila de la base de dades
nombasedades primer fa una assignació de camps a macros per, en acabat, usar aquestes macros al text. Vegem-ne un exemple:
\DTLforeach{estudiants}{%
\cognomP=Cognom1,\cognomS=Cognom2,\nom=Nom}{%
\cognomP\\%
\cognomS\\%
\nom}
Aquest comandament agafa cada fila, cada registre de la base de dades estudiants, i assigna cada camp a una macro (a la macro
\cognomP li assigna el camp
Cognom1, per exemple). Aleshores escriu un a sota de l’altre el contingut de les macros amb el contingut dels camps.
Basant-nos amb aquestes iteracions podem fer que una acció es repeteixi per cada registre obtenint així i amb un sol document font tants documents finals com registres tingui el fitxer de dades. Això és el que permet crear tants documents personalitzats com persones tinguem a la llista. El codi simplificat és el següent:
\DTLforeach{estudiants}{%
\nom=Nom,\cognomP=Cognom1,\cognomS=Cognom2,\asA=Assignatura1,\asB=Assignatura2,\asC=Assignatura3,\mitj=Mitjana%
}{%
\vspace*{2cm}%
Comunicació de qualificacions\par
\vspace{3cm}
D'acord amb les dades dipositades en aquesta institució,\\%
en/na \textbf{\nom\ \cognomP\ \cognomS} amb DNI \dni ha obtingut aquestes qualificacions:\par
\begin{tabular}{ccc}
\bfseries Assignatura 1 & \bfseries Assignatura 2 & \bfseries Assignatura 3\\
\asA & \asB & \asC
\end{tabular}\par
resultant una nota mitjana de \DTLround{\mitj}{\mitj}{2}\mitj \par
\vspace{7cm}
Barcelona, \today \par
\newpage}
}
Observeu que primer es fa l’assignació a macros del contingut dels camps (p.ex:
\nom=Nom)i després s’escriuen les dades personals i es crea una taula on es representen les qualificacions i, finalment s’escriu la mitjana arrodonida que també calcula un comandament del paquet
datatool.
Fixeu-vos que dins la iteració hi ha el comandament \
newpage que és el que fa que cada cop que s’acaba un registre es generi una pàgina nova on posar les dades del registre següent.
Val la pena estudiar el document tex font adjunt a l’article per veure les diferents possibilitats amb què podem treballar. També és interessant observar el PDF que en resulta on a les dues primeres pàgines hi ha la informació pel professorat i la resta del document serien els butlletins de qualificacions a repartir als estudiants.
Publicat per primera vegada el dissabte 7 de juliol de 2012.