Pàgines

diumenge, 30 de novembre de 2014

Mapes conceptuals amb tikz

El paquet tikz té una biblioteca especial (mindmap) per crear mapes conceptuals o mentals molt vistosos. En aquest article veurem com crear un d'aquesta mapes conceptuals, en concret un sobre el portafolis electrònic o eportafolis.



Comencem creant els estils dels nodes arrel i els dels altres conceptes que en sortiran. Per exemple definim l'estil de tots els nodes:
every node/.style={concept,%tipus de node=concept
                 font=\sffamily,% tipus de lletra 
                 circular drop shadow,%ombra},
evidencia/.style={%concepte evidència         
                 concept color=red,%color del node
                 faded/.style={concept color=red!50}},%definim una variant atenuada

Si volem redefinir o afegir característiques a un node tenim el comandament append style:
root concept/.append style={
                 concept color=black,
                   %fill=white, %omple de color blanc
                   line width=1ex,
           %text=black, %color del text
           text=white,
           font=\large\scshape},% família i tipus de lletra

També s'ha de definir com es distribuiran els conceptes fills en els diferents subnivells:
level 1/.append style={level distance=4.5cm,%distància de l'arrel al primer nivell
                     %sibling angle=90,% angle que formaran els fills entre sí. Aquí fixat a 90º
                     sibling angle=360/\the\tikznumberofchildren,%divideix 360 entre el nombre de fills perquè tots els angles siguin iguals
                     font=\scshape},%tipus de lletra

Un cop definits tots els estils comencem a dibuixar el mapa començant per l'arrel:
\node [root] (NomDelConcepte) {Contingut}

A Contingut hi podem posar un text curt, millor una paraula, o be incloure una imatge amb \includegraphics.
Del node arrel hi surten els fills i "néts":
child [EstilDeConcepte] { node [yshift=-1cm]  (NomDelConcepte) {Contingut fill 1}
                            child{ node(NomDelConcepte) {Contingut nét 1}}
                    child{ node(NomDelConcepte) {Contingut nét 2}}
                    child{ node(NomDelConcepte) {Contingut nét 3}}
}%tanca el fill 1

Val la pena estudiar el codi al fitxer mapamental.tex i veure com, un cop processat, en resulta el PDF mapamental.pdf tan impressionant.

Es pot trobar més informació sobre la biblioteca de mapes mentals i trucs al Manual de PGF-tikz i a l'etiqueta mindmaps de tex.stackexchange

diumenge, 16 de novembre de 2014

Diagrames de flux amb tikz

Un diagrama de flux és una figura que il·lustra un procés, que pot ser informàtic (un algorisme) o de qualsevol altra mena. Són molt útils per visualitzar la seqüència de les accions i què passa quan cal prendre algun tipus de decisió.

Amb tikz es pot fer tot tipus de figures i gràfics i, no podia ser d'altra manera, es poden construir diagrames de flux clars, entenedors i atractius. En aquest article veurem com es crea una figura amb tikz i com, en acabat, es pot incrustar en qualsevol document LaTeX.

Un diagrama de flux consta d'unes "caixes" de text connectades per línies. Aquestes "caixes" tenen diferent forma -i color- segons el que representin: l'entrada del procés, una acció, una decisió o la sortida. A  tikz  aquestes caixes se'n diuen nodes i es poden construir fàcilment amb l'ajut de biblioteques específiques simplement donant el nom de la figura que cal dibuixar. Per exemple, per dibuixar un node d'entrada al procés amb forma rectangular només cal definir el node amb les ordres: rectangle i draw, és a dir "dibuixa un rectangle". Naturalment podem donar un format més acurat al node, cosa que es fa abans de començar a dibuixar els nodes sota el comandament de configuració \tikzset. Vegem un exemple de definició de l'estil d'un node de decisió:

decisio/.style = {diamond,% forma geomètrica de romb 
                     draw, 
                     top color= white,% color de la part superior del degradat
                     bottom color=red,% color de la part inferior del degradat
                     drop shadow,% ombra
                     text width=8em, % ampla del text
                     text badly centered, % centrat del text
                     node distance=3cm, %distància al centre dels altres nodes
                     inner sep=0pt},%separació del text a la figura que el conté

Dins d'aquest comandament de configuració també es pot definir el format de les línies que uniran els nodes, per exemple amb forma de fletxes:

linia/.style = {draw, 
                     line width=1.5pt,%gruix de la línia
                     % per veure els estils de fletxa: http://tex.stackexchange.com/questions/42611/list-of-available-tikz-libraries-with-a-short-introduction/42679
                    -triangle 45},% la fletxa és un triangle de 45º

Un cop definits els estils dels nodes i de les línies passem a dibuixar el diagrama (\tikzpicture) tot posant els nodes un a sota dels altres. Comencem pel primer, un node d'entrada:

\node [entrada] (inici) {Text del node\\segona línia de text};

  • \node és el comandament que dibuixarà el node
  • [entrada] és el format del node que hem definit prèviament
  • (inici) és el nom que li donem al node i que l'identificarà dins la figura
  • {Text} és el text que apareix dins del node, dins del rectangle en aquest cas.
El segon bloc el volem situat sota el node inici, per això escrivim:
    \node [bloc, below=of inici] (divesquerra) {Text...};
  • la diferència respecte al primer node és a [bloc, below=of inici], on bloc és l'estil de node i below=of inici diu on s'ha de situar el bloc (sota d'inici).  Amb above=of, right=of i left=of el posaríem a sobre, a la dreta o a l'esquerra respectivament.
D'aquesta manera anem situant els diferents tipus de bloc. Quan ja estan tots dibuixem les línies amb punta de fletxa que els uneixen:
    \draw [linia] (inici) -- (divesquerra);
Podem dibuixar línies acodades amb |- ó amb -|:
    \draw [linia] (a1) |- (divesquerra); 
Finalment, podem dibuixar un doble colze si marquem un punt del diagrama, una coordenada, i hi fem arribar una línia sense punta i que en surti una altra amb punta:
    \coordinate[right=5cm of donau]   (a1);
  • Aquest punt de coordenades és 5cm a la dreta del node donau i l'anomenem a1.
Al fitxer tex diagramadeflux.tex podeu veure el codi comentat del diagrama complet. I al fitxer diagramadeflux.pdf  podeu veure'n el resultat. S'hi representa l'algorisme de la multiplicació russa, una manera molt interessant de fer multiplicacions.