- Questo topic ha 7 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 11 mesi fa da
Liverpool.
-
CreatoreTopic
-
20 Settembre 2016 alle 12:39 #107947::
Sto tentando di utilizzare dei \pic per ripetere più volte una stessa figura in un ambiente tikz.
Trovo difficile l’utilizzo dei \pic per posizionare queste figure, perché il \pic ammette un solo punto di ancoraggio, nel punto di origine di coordinate (0,0) rispetto al quale è stato inizialmente costruito.
Sarebbe molto utile poter costruire una scatola di ancoraggio simile a quella dei nodi, che racchiudesse il contorno della figura così da stabilire la posizione relativa che la figura deve avere nei confronti di tutti gli altri oggetti del disegno.
Allego un minimo esempio compatibile
[attachment=1745]prova1.tex[/attachment]
Attachments:
You must be logged in to view attached files. -
CreatoreTopic
-
AutoreRisposte
-
-
20 Settembre 2016 alle 13:16 #107948::
mattiaca” post=108070Sto tentando di utilizzare dei \pic per ripetere più volte una stessa figura in un ambiente tikz.
Trovo difficile l’utilizzo dei \pic per posizionare queste figure, perché il \pic ammette un solo punto di ancoraggio, nel punto di origine di coordinate (0,0) rispetto al quale è stato inizialmente costruito.
Sarebbe molto utile poter costruire una scatola di ancoraggio simile a quella dei nodi, che racchiudesse il contorno della figura così da stabilire la posizione relativa che la figura deve avere nei confronti di tutti gli altri oggetti del disegno.
Allego un minimo esempio compatibile
[attachment=1745]prova1.tex[/attachment]Ciao.
L’oggetto pic non ha gli ancoraggi come i nodi.
Una soluzione è proprio quella di creare un nuovo tipo di nodo con gli ancoraggi che desideri. Per questo leggi la documentazione. Anche se almeno fino a qualche tempo fa non era questa una operaizone così semplice.
R.
-
21 Settembre 2016 alle 1:50 #107949::
Potresti creare un comando che generi un nodo che prenda come input le coordinate in cui vuoi che esso venga posizionato, nome del nodo e testo; infine, come argomento opzionale, le opzioni del nodo che includano il punto di ancoraggio:
`
\documentclass[tikz]{standalone}
\usepackage{xparse}
\NewDocumentCommand{\mynode}{%
O{}
m
m
m
}{
{
\node [#1] (#2) at #3 {#4};
}
}
\begin{document}
\begin{tikzpicture}
\draw (0,0)–(1,1);
\mynode[anchor=south west,draw]{pippo}{(1,1)}{Testo}
\end{tikzpicture}
\end{document}
`Per ulteriori spiegazioni ed esempi ti rimando ad una risposta che scrissi tempo fa su tex.sx: (seconda risposta)
Saluti,
Mirko
-
21 Settembre 2016 alle 4:05 #107950::
mirkom” post=108087Potresti creare un comando che generi un nodo che prenda come input le coordinate in cui vuoi che esso venga posizionato, nome del nodo e testo; infine, come argomento opzionale, le opzioni del nodo che includano il punto di ancoraggio:
`
\documentclass[tikz]{standalone}
\usepackage{xparse}
\NewDocumentCommand{\mynode}{%
O{}
m
m
m
}{
{
\node [#1] (#2) at #3 {#4};
}
}
\begin{document}
\begin{tikzpicture}
\draw (0,0)–(1,1);
\mynode[anchor=south west,draw]{pippo}{(1,1)}{Testo}
\end{tikzpicture}
\end{document}
`Per ulteriori spiegazioni ed esempi ti rimando ad una risposta che scrissi tempo fa su tex.sx: (seconda risposta)
Saluti,
MirkoMa intendi sovrapporre un nodo di forma rettangolare alla pic?
Il trucco potrebbe funzionare ma solo per forme semplici.
Oppure intendi costruire un nodo apposito?
R.
-
21 Settembre 2016 alle 8:55 #107951
-
22 Settembre 2016 alle 10:51 #107952::
Il problema è che non basta definire il nodo che racchiude la figura (non pretendo per forza che sia corrispondente alle coordinate della spline), ma voglio che l’ancoraggio del comando \pic venga riferito alle ancore del nodo che vado a definire nella pic e non al punto (0,0). Spero che la mia questione sia più chiara.
-
22 Settembre 2016 alle 15:49 #107953::
mattiaca” post=108070Sarebbe molto utile poter costruire una scatola di ancoraggio simile a quella dei nodi, che racchiudesse il contorno della figura così da stabilire la posizione relativa che la figura deve avere nei confronti di tutti gli altri oggetti del disegno.
Come dice @mirkom, puoi inserire il pic in un nodo. Il codice del nodo deve stare nel corpo del codice principale, non nella definizione del pic. Una cosa del genere:
`\node [opzioni, inner sep=0pt, outer sep=0pt] at (x,y) {\tikz\pic{nomepic};};`
In questo modo la “scatola” che racchiude il “contorno” della figura è un rettangolo. Puoi usare le forme di nodi già definite dal pacchetto oppure, come dice @robitex, crearne di altre.
Rimane fondamentale che la figura sia costruita all’interno del pic in maniera appropriata.Ciao
-
24 Settembre 2016 alle 11:25 #107954::
Guarda questo codice:
`\documentclass[tikz]{standalone}
\usetikzlibrary{calc}\tikzset{
ancora/.initial=,
triangolo/.pic={
\tikzset{
north east/.style={shift={($(30:1.5)!2!(0,0)$)}},
south west/.style={shift={($(210:1)!2!(0,0)$)}},
south east/.style={shift={($(-30:1)!2!(0,0)$)}}
}
\draw [\pgfkeysvalueof{/tikz/ancora}] (210:1) — (-30:1) — (30:1.5) — cycle;
}
}\begin{document}
\begin{tikzpicture}
\fill [blue] (-2,0) circle (1.5pt)
(0,0) circle (1.5pt)
(2,0) circle (1.5pt);
\pic [ancora=south west] at (-2,0) {triangolo};
\pic [ancora=north east] at (0,0) {triangolo};
\pic [ancora=south east] at (2,0) {triangolo};
\end{tikzpicture}
\end{document}`
Sono state definite tre ancore corrispondenti ai vertici del triangolo ai quali sono stati (arbitrariamente) attribuiti i nomi derivati dalla rosa dei venti, come di consueto. Per semplificare il codice, è stata definita la chiave [tt]ancora[/tt] da usare tra le opzioni del pic. Quello che fa è traslare semplicemente il disegno del pic in modo tale che l’ancora indicata coincida con la sua origine e quindi con il punto dichiarato nel codice principale.
Noterai che non ho usato i nodi coordinata per definire il percorso. Questo perché, quando trasli il sistema di riferimento, i nodi non vengono spostati, quindi diversamente il codice non funzionerebbe. Questa è la soluzione più semplice, perché potresti traslare la tela (compresi i nodi) con la chiave [tt]transform canvas[/tt], ma poi dovresti ridefinire il bounding box e non è semplice.
La libreria [tt]calc[/tt] serve per calcolare l’origine del nuovo sistema di riferimento a partire dalle coordinate delle ancore, cioè i punti simmetrici delle ancore rispetto all’origine del pic. Non è indispensabile perché potresti scriverne direttamente le coordinate, ma l’ho inserita per i più “pigri”.
Quando tu scrivi
`\pic [ancora=south west] at (-2,0) {triangolo};`
l’opzione viene ignorata fino alla riga con il comando [tt]\draw[/tt]. A quel punto, tra le opzioni viene inserito il valore di [tt]ancora[/tt] cioè [tt]south west[/tt]. Ma [tt]south west[/tt] corrisponde a [tt]shift={($(210:1)!2!(0,0)$)}[/tt], quindi è come se stessi scrivendo:
`\draw [shift={($(210:1)!2!(0,0)$)}] (210:1) — (-30:1) — (30:1.5) — cycle;`
che ha l’effetto di traslare il triangolo in modo tale che il vertice sinistro cada nell’origine del pic e quindi nel punto che hai indicato nel codice.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.