Pàgines

dilluns, 5 d’agost del 2013

Personalitzar documents amb datatool

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.


catalatex_logo.png
Visualització Baixa






dades.csv
Baixa






mailmerge.pdf
Visualització Baixa






mailmerge.tex
Baixa





Publicat per primera vegada el dissabte 7 de juliol de 2012.

diumenge, 4 d’agost del 2013

El Diari de laboratori a LaTeX templates

LaTeX templates és un lloc web que vol popularitzar l’ús de LaTeX amb l’aportació per part de la comunitat de plantilles de documents de tipologia força variada per poder ser vistos, descarregats i emprats posteriorment.

És un lloc força nou a la xarxa, però ja es veu que pot ser ple d’agradables sorpreses.

Des de CataLaTeX hi vam enviar un primer treball, el Diari de laboratori que vàrem publicar el passat mes de març. Després d’un temps en estudi l’editor del lloc, en Velimir, finalment ha fet una plantilla molt més general i l’ha publicada al lloc sota l’epígraf de Laboratory books.



L’article es titula Compact Laboratory Book i hi apareix la descripció de la plantilla, l’autor original i un advertiment sobre la necessitat de tenir instal·lada la classe labbook. Veureu que el PDF d’exemple respecta els trets bàsics del Diari i que en millora la generalització.

No sabem si LaTeX templates voldrà publicar més plantilles de cataLaTeX, però el que sí ens estem plantejant és afegir un resum en anglès de cada nou article per augmentar-ne la difusió.

Esperem que trobeu LaTeX templates tant interessant i útil com nosaltres.

Publicat per primer cop el diumenge 3 de juny de 2012.

Pechakucha amb LaTeX

Un PechaKucha 20x20 és un tipus de presentació senzilla en la qual es mostren 20 imatges cadascuna durant 20 segons. Les imatges se succeeixen automàticament mentre el presentador va parlant.

En els esdeveniments d’Ignite els presentadors comparteixen les seves passions personals i professionals també amb 20 diapositives que avancen automàticament però en aquest cas cada 15 segons, cosa que fa que duri només 5 minuts.

Amb LaTeX, en concret amb la classe de diapositives beamer de la que hem parlat en alguns articles d’aquest lloc (feu clic per veure els articles sote l'etiqueta beamer), podem crear fàcilment aquest tipus de presentacions, els pechakucha o els ignite. A tex.stackexchange es va plantejar la pregunta de com fer-ho i les solucions donades són realment elegants i senzilles.

Consisteixen en crear una classe de presentacions, anomenada beamer-lightning.cls, que el que fa és definir un nou comandament, \slideduration, que controla el temps que es mostrarà una diapositiva.

Aquest comandament pot prendre 2 valors: 15 segons per a l’opció de la classe ignite, i 20 segons per a l’opció pechakucha. Després passa aquesta opció a beamer que farà la resta de la feina. I finalment defineix un nou entorn per crear les diapositives i donar-les un títol:
\newenvironment{slide}[1]
{\begin{frame}[environment=slide]
\transduration{\slideduration}
\frametitle{#1}}
{\end{frame}}
Amb això ja podem crear 3 tipus de presentacions:

Una presentació clàssica bàsicament amb text i que avança cada 15 o 20 segons. Vegeu el PDF adjunt anomenat pechakucha.pdf

El segon tipus és més interessant perquè utilitza el paquet pgffor (del conjunt pgf) que permet fer iteracions amb el comandament \foreach. D’aquesta manera si tenim 20 imatges anomenades imatge1, imatge2,...imatgeN podem associar el títol a cadascuna d’elles i anar creant les 20 diapositives de manera automàtica a cada pas de la iteració:
\foreach \slidetitle in {
{Abellerols, els colors de l'estiu}, Ànecs, L'aneguet lleig: el cigne, Fraret, Flamenc, {Inseparables, els Agapornis}} {
\begin{slide}{\slidetitle}
\begin{center}
\includegraphics[height=.75\paperheight]{imatge\thepage.jpg}
\end{center}
\end{slide}
}
Podeu veure el resultat en el document adjunt pechakucha2.pdf.

El tercer tipus és molt semblant a l’anterior però amb la diferència que la iteració no necessita que les imatges tinguin un nom consecutiu sinó qualsevol nom:
\foreach \slidetitle /\imagefile in {
Abellerols /imatge1,
Agapornis /agapornis,
Ànecs mandarins /anecs,
Cignes /cignes,
Flamenc /flamenc,
Fraret /fraret}
{
\begin{slide}{\slidetitle}
\begin{center}
\includegraphics[height=.75\paperheight]{\imagefile.jpg}
\end{center}
\end{slide}
}
Podeu veure el resultat en el document adjunt pechakucha3.pdf.

Podem veure, doncs, que amb aquesta solució tan elegant podem fer fàcilment presentacions perquè s’escurça molt el temps de realització. Podem dedicar-lo ara a triar bones imatges i títols perquè de la feina tècnica s’encarrega, com sempre, LaTeX.


 pechakucha2.pdf
Visualització Baixa






pechakucha2.tex
Baixa






pechakucha3.pdf
Visualització Baixa






pechakucha3.tex
Baixa






pechakucha.pdf
Visualització Baixa





Publicat per primera vegada el diumenge 18 de març de 2012.

Diari de laboratori

Els científics duen un registre dels seus experiments en un Diari de laboratori. A més, un Diari de laboratori pot ser una bona manera d’avaluar els períodes de pràctiques dels estudiants, millor que no pas un examen (sí, amics meus, hi ha universitats que avaluen les practiques amb un examen tipus test).

La classe labbook crea Diaris de laboratori. Està basa en la classe scrbook, la classe de KOMA-Script pels llibres, en la qual cada capítol és un dia de treball (labday) en el qual es poden fer diferents experiments i subexperiments. Defineix per tant el comandament \experiment (equivalent a la secció) i els diferents \subexperiment (subseccions) que pugui tenir cadascun d’ells. A més, crea automàticament una entrada a l’índex alfabètic de manera que si un experiment o subexperiment es realitza en diferents dies sigui fàcilment localitzable.

Un experiment (o subexperiment) es pot definir inicialment a partir del comandament:
\newexperiment{abreviatura}[Nom curt]{Nom llarg} 
on l’abreviatura serveix per identificar cada experiment de manera que al llarg del diari només caldrà escriure-la per a què quedi ben identificat. El Nom curt és el que, opcionalment, apareix a l’Índex i el Nom llarg el que apareixerà a la Taula de continguts i al propi títol. Però també es pot definir un experiment simplement amb el comandament
\experiment{abreviatura}[Nom curt]{Nom llarg} 
al dia en què es realitza.

El Nom curt pot estar format per diferents elements separats per comes de manera que quan es construeix l’Índex poden aparèixer separats. A l’exemple hem utilitzat
\experiment[Identificació de Ligasa i Amilasa,Ligasa,Amilasa ]{Identificació de Ligasa i Amilasa en la mostra}
 i a l’Índex apareix l’experiment a la A l’Amilasa, i a la L la Ligasa. D’aquesta manera si fem un (sub)experiment durant diferents dies a l’Índex ens quedaran tots recollits en la mateixa entrada alfabètica.

Hem recollit a l’exemple un parell de millores aparegudes a tex.stackexchange.com. Una d’elles permet que el Diari vagi tot seguit i que un dia (labday, amb la jerarquia de capítol) no comenci en pàgina nova sinó al final del dia anterior. L’altra, amb la contribució del paquet chngcntr, elimina el número de capítol dels títols de figures, taules i equacions.

A més, en l’exemple hem utilitzat el comandament de scrbook
\begin{addmargin}[4cm]{0cm} 
que ens permet estrènyer la línia de text i deixar un bon marge esquerre per anotacions i sobre el que vam parlar a l'article Manual de referència amb KOMA-Script. També hem usat diferents característiques del paquet KOMA per donar la resultat final una aparença força interessant i potent.

Al fitxer tex adjunt podeu estudiar el codi comentat del Diari i veure’n el resultat un cop processat al fitxer PDF adjunt. Esperem que us sigui d’utilitat.

Publicat per primera vegada el diumenge 4 de març de 2012.