Re: Le mie (dis)avventure con TikZ

#96703
Up
0
Down
::


Quella proposta da Little è certamente una soluzione.

Ne propongo una seconda spiegando cosa c’è che secondo me non funziona in quel codice. Per capirlo, è sufficiente aggiungere la chiave [tt]draw[/tt]: `
\begin{tikzpicture}[font=\small,x=5mm,y=5mm]
\matrix (a)[matrix of nodes, nodes in empty cells,nodes={draw, %<= aggiunta qui text width=8mm, text depth=1mm, text centered}]{ & $1$ & $-6$ & $11$ & $-6$ \\ $1$ & & $1$ & $-5$ & \\ & $1$ & $-5$ & & \\ }; \begin{scope}[blue] \draw(a-1-2.north west)--(a-3-1.south east); \draw(a-2-1.south west)--(a-2-5.south east); \draw(a-1-4.north east)--(a-3-4.south east); \end{scope} \draw[->,red] (a-2-1)–(a-3-3);
\draw[->,red] (a-3-3)–(a-2-4);
\end{tikzpicture}
` I nodi sono tutti attaccati perciò la seconda freccia non può essere disegnata: non c’è spazio. La prima cosa da fare è aggiungere spazio fra righe e colonne con opzioni apposite: `
\begin{tikzpicture}[font=\small,x=5mm,y=5mm]
\matrix (a)[matrix of nodes, nodes in empty cells,% meglio matrix of math nodes
row sep=1ex,column sep=1em,
nodes={draw,text width=8mm, text depth=1mm, text centered}]{
& $1$ & $-6$ & $11$ & $-6$ \\
$1$ & & $1$ & $-5$ & \\
& $1$ & $-5$ & & \\
};
\begin{scope}[blue]
\draw(a-1-2.north west)–(a-3-1.south east);
\draw(a-2-1.south west)–(a-2-5.south east);
\draw(a-1-4.north east)–(a-3-4.south east);
\end{scope}

\draw[->,red] (a-2-1)–(a-3-3);
\draw[->,red] (a-3-3)–(a-2-4);
\end{tikzpicture}
` il che ci permette anche di capire che il primo dei segmenti in blu è diventato inguardabile. Il problema è che inizia dal nodo della seconda colonna e finisce nella prima. Anche il secondo segmento verticale è sbagliato visto che è appoggiato ai nodi della stessa colonna. Oltretutto i nodi hanno dimensioni differenti. Insomma, una schifezza.

Per ovviare a tutto ciò, punto 1 sistemiamo i nodi: devono avere le stesse dimensioni. È facile: usiamo `
nodes={draw,text depth=0mm,text height=1ex,text centered,minimum width=5mm,minimum height=2ex,inner sep=0pt}
` dove diamo dimensioni minime in larghezza e altezza e eliminiamo il padding con inner sep. Ora i segmenti. Siccome c’è spazio fra le colonne, bisogna individuarne la metà, il che presuppone di caricare la libreria calc. Quindi: `\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,matrix}
\begin{document}

\begin{tikzpicture}[font=\small,x=5mm,y=5mm]
\matrix (a)[matrix of nodes, nodes in empty cells,
row sep=1ex,column sep=1em,
nodes={text depth=0mm,text height=1ex,text centered,minimum width=5mm,minimum height=2ex,inner sep=0pt}]{
& $1$ & $-6$ & $11$ & $-6$ \\
$1$ & & $1$ & $-5$ & \\
& $1$ & $-5$ & & \\
};
\begin{scope}[blue]
\draw($(a-1-1.north east)!0.5!(a-1-2.north west)$)–
($(a-3-1.south east)!0.5!(a-3-2.south west)$);
\draw(a-2-1.south west)–(a-2-5.south east);% stessa cosa di sopra qui
\draw(a-1-4.north east)–(a-3-4.south east);% idem, ma in verticale
\end{scope}

\draw[->,red] (a-2-1)–(a-3-3);
\draw[->,red] (a-3-3.north east)–(a-2-4.south west);% meglio così
\end{tikzpicture}

\end{document}` Ho già tolto il [tt]draw[/tt] lasciato per debug. Mancano un paio di elementi lasciati per esercizio.

Ciao
Claudio

Go to top