::
Phoenix” post=111225Buongiorno a tutti
vi scrivo perché vorrei apporre alcune modifiche ad uno schema prodotto con tikz ma non riesco a capire come.
Il codice è il seguente
`
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows}
\usepackage{verbatim}
\begin{document}
\tikzstyle{block} = [draw, fill=blue!20, rectangle, minimum height=2em, minimum width=10em]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]
\begin{tikzpicture}[auto, node distance=4cm,>=latex']
\node [input, name=input] {};
\node [block, right of=input] (pd) {Phase Detector (PD)};
\node [block, right of=pd, node distance=6cm] (lf) {Loop Filter (LF)};
\draw [->] (pd) — node[name=upd] {$u_{PD}(t)$} (lf);
\node [output, right of=lf] (output) {};
\node [block, below of=upd] (vco) {VCO};
\draw [draw,->] (input) — node {input signal} (input);
\draw [->] (input) — node {$u_{in}(t)$, $\omega_{in}$} (pd);
\draw [->] (lf) |- node [name=ulf] {$u_{LF}(t)$}(vco);
\draw [->] (vco) -| node {output signal $u_{out}(t)$, $\omega_{out}$} (pd);
\end{tikzpicture}
\end{document}
`
e produce questo risultato:

Ma io vorrei una cosa del genere…
Prova: `\draw [->] (vco) -| node[pos=0.75] {output signal $u_{out}(t)$, $\omega_{out}$} (pd);` In sostanza, la lunghezza del segmento che tracci viene normalizzata
fra 0 e 1 perciò puoi personalizzare la posizione di inserimento dei nodi dove vuoi tramite la chiave pos. Attenzione che con il costrutto |- o -| è più difficile individuare il valore corretto, ma basta fare un paio di tentativi.
Phoenix” post=111225
a cui inoltre:
– toglierei la piccola punta di freccia sul segnale di input
– amplierei l’altezza dei rettangoli
– fare arrivare la freccia che esce da VCO al lato sinistro di Phase Detector in parallelo con la freccia di input
Cosa potrei modificare?
Grazie in anticipo a chi mi darà consigli 🙂
Punto 1: `\draw [draw,->] (input) — node {input signal} (input);` non ha senso perché questo è quello che fai: il tuo input iniziale è un nodo di tipo coordinata (cioè non ha dimensione), disegni un segmento che va da un punto infinitesimale a se stesso a cui aggiungi un’etichetta e inserisci una freccia direzionale. Per questo motivo, TikZ non protesta, ma ti piazza una freccia la cui punta finisce esattamente nelle coordinate che definiscono il tuo input. Molto semplicmente: `\draw (input) — node {input signal} (input);` Nota che puoi fare molto più semplicemente `\node (input) {input signal};` togliere l’altra riga di codice e ricordarti di piazzare il secondo blocco più a destra del valore di default.
Punto 2: non lo farei, ma basta modificare il numerino vicino alla chiave minimum height.
Punto 3: questo richiede un minimo di accorgimento. `\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{calc,shapes,arrows}
\usepackage{verbatim}
\begin{document}
\tikzstyle{block} = [draw, fill=blue!20, rectangle, minimum height=4em, minimum width=10em]
\tikzstyle{input} = [coordinate]
\tikzstyle{output} = [coordinate]
\tikzstyle{pinstyle} = [pin edge={to-,thin,black}]
\begin{tikzpicture}[auto, node distance=4cm,>=latex']
\node [coordinate](input) {};
\node [block, right of=input] (pd) {Phase Detector (PD)};
\node [block, right of=pd, node distance=6cm] (lf) {Loop Filter (LF)};
\draw [->] (pd) — node[name=upd] {$u_{PD}(t)$} (lf);
\node [output, right of=lf] (output) {};
\node [block, below of=upd] (vco) {VCO};
%\draw [->] (input) — node {$u_{in}(t)$, $\omega_{in}$} (pd); % cosi non va, bisogna disegnarla al contrario e sistmare la label in alto
\draw [<-] ($(pd.north west)!0.5!(pd.west)$) coordinate (x) -- node[above] {$u_{in}(t)$, $\omega_{in}$} ($(x-|input)$) coordinate (z); % in pratica: calcolo il punto a 1/3 dell'altezza del rettangolo e salvo in x il valore della coordinata; disegno una freccia che parte da x e punta verso il punto che è l'intersezione fra x e input e salvo in z che uso dopo per includere l'etichetta
\draw (z) -- node[left] {input signal} (z);
\draw [->] (lf) |- node [name=ulf] {$u_{LF}(t)$}(vco);
\draw [<-] ($(pd.south west)!0.5!(pd.west)$) coordinate (x) --($(x-|input)!0.5!(x)$) |- (vco) node[pos=0.25, left] {output signal $u_{out}(t)$, $\omega_{out}$};% questo lo devi capire dato il segmento precedente.
\end{tikzpicture}
\end{document}
`
Ciao
Claudio