
Actualmente estoy escribiendo mi tesis de licenciatura usando LaTex y Tikz y actualmente estoy estancado. Aunque mis publicaciones anteriores me ayudaron mucho con tantas cosas relacionadas con tikz, siempre surgen nuevas dificultades para el usuario inexperto...
Me gustaría obtener una imagen como esta donde pueda nombrar las flechas y, lo más importante, cambiar su tamaño (¿o las distancias de los nodos individualmente?).
He llegado hasta aquí pero como puedes ver no sé cómo hacer la flecha de abajo que conecta el nodo de entrada con el tercer bloque y no sé cómo acortar la distancia entre los tres bloques. Aquí está mi foto:
... y mi código
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows, positioning, quotes}
\usetikzlibrary{arrows.meta, positioning, decorations.markings}
\usepackage{gensymb}
\usepackage{verbatim}
\begin{document}
\begin{figure}[htbp]
\centering
\begin{tikzpicture}
[block/.style={draw,minimum width=#1,minimum height=2em},
block/.default=10em,high/.style={minimum height=3em},auto]
%node distance=5em,auto]
% Nodes
\node (n0) {Input};
\node[block=3em,high,right=of n0] (n1) {DiM};
\node[block=3em,high,right=of n1] (n2) {Sensor};
\node[block=3em,high,right=of n2] (n3) {CANoe};
\node[right=of n3] (n4) {Measurement File};
% Connections
\draw[-stealth] (n0) edge[""] (n1);
\draw[-stealth] (n1) edge[""] (n2);
\draw[-stealth] (n2) edge[""] (n3);
\draw[-stealth] (n3) edge[""] (n4);
\end{tikzpicture}
\caption{CANoe Measurement Network}
\label{fig:measurement_network}
\end{figure}
\end{document}
He cargado todos los ajustes preestablecidos importantes (babel, tikz, etc.)
¡Me alegraría que alguien pudiera ayudarme! ¡Gracias chicos, realmente aprecio la ayuda!
Respuesta1
Úselo node distance
para el espaciado en of
. Para dibujar flechas adicionales, ¿por qué no dibujar simplemente flechas "normales"?
EDITAR:Para agregar texto a esa flecha, debes modificar un poco.
EDITAR 2:Para cambiar el punto inicial de la flecha, sólo tienes que nombrar el punto medio de la primera flecha. Por cierto, edge
no es necesario, simplemente --
está bien.
\documentclass[tikz,margin=10]{standalone}
\usetikzlibrary{positioning,arrows.meta,quotes}
\begin{document}
\begin{tikzpicture}
[block/.style={draw,minimum width=#1,minimum height=2em},
block/.default=10em,high/.style={minimum height=3em},auto,
node distance=5mm, % initially 1cm
>=Stealth]
%node distance=5em,auto]
% Nodes
\node (n0) {Input};
\node[block=3em,high,right=1cm of n0] (n1) {DiM};
\node[block=3em,high,right=of n1] (n2) {Sensor};
\node[block=3em,high,right=of n2] (n3) {CANoe};
\node[right=1cm of n3,align=center] (n4) {Measurement\\File};
% Connections
\draw[->] (n0) -- (n1) coordinate[midway] (start);
\draw[->] (n1) -- (n2);
\draw[->] (n2) -- (n3);
\draw[->] (n3) -- (n4);
\coordinate (x) at ([yshift=-1cm]n3.south);
\coordinate (y) at (start |- x);
\draw (start) -- (y) (x) edge[->] (n3.south) (x) edge["EXAMPLE"] (y);
\end{tikzpicture}
\end{document}
Respuesta2
También puede utilizarlo \foreach
para reducir el tamaño del código. Para cambiar la distancia del nodo localmente, simplemente use right=<some length> of
como también lo señala @Fractal. Además, la flecha abajo-derecha-arriba se puede simplificar como \draw[->] (n0) --++(0,-4em) -| (n3);
.
\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows.meta}
\begin{document}
\begin{tikzpicture}
[block/.style={draw,minimum width=#1,minimum height=1em},
block/.default=10em,high/.style={minimum height=3em},
node distance=2em, > = Stealth]
% Nodes
\node (n0) {Input};
\node[block=3em,high,right=3em of n0] (n1) {DiM};
\node[block=3em,high,right=of n1] (n2) {Sensor};
\node[block=3em,high,right=of n2] (n3) {CANoe};
\node[right=3em of n3] (n4) {Measurement File};
% Connections
\foreach \i [count=\j from 1] in {0,...,3}
\draw[->] (n\i) -- (n\j);
\draw[->] (n0) --++(0,-4em) -| (n3);
\end{tikzpicture}
\end{document}
Respuesta3
En caso de que no necesite etiquetas en los bordes entre los nodos de la cadena, entonces el código de su esquema de bloques se puede dibujar de forma sencilla mediante el uso de la chains
biblioteca y para las flechas entre ellos utilice la macro join
. La etiqueta del anuncio de flecha solo en la flecha que vincula "entrada" con "CANoe" es un anuncio con el nodo colocado en consecuencia en la flecha:
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta,
chains,
positioning}
\begin{document}
\begin{tikzpicture}[auto,
node distance = 7mm and 9mm,
start chain = going right,
box/.style = {draw, minimum size=3ex, inner sep=2mm,
on chain, join=by arr},
arr/.style = {-Stealth}
]
% Nodes
\node (n0) [box, draw=none] {Input};
\node (n1) [box] {DiM};
\node (n2) [box] {Sensor};
\node (n3) [box] {CANoe};
\node (n4) [box, draw=none] (n4) {Measurement File};
% Connections
\coordinate[below=of n3] (aux);
\draw[arr] (n0) |- node[pos=0.75] {forefeed} (aux) -- (n3);
\end{tikzpicture}
\end{document}
En el caso de que desee que las etiquetas tengan todos los bordes, join
puede reemplazarlas con flechas con etiquetas. Para ellos es útil utilizar quotes
la biblioteca:
\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{arrows.meta,
chains,
positioning,
quotes}
\begin{document}
\begin{tikzpicture}[auto,
node distance = 7mm and 11mm,
start chain = going right,
box/.style = {draw, minimum size=3ex, inner sep=2mm,
on chain},
every edge/.style = {draw, -Stealth}
]
% Nodes
\node (n0) [box, draw=none] {Input};
\node (n1) [box] {DiM};
\node (n2) [box] {Sensor};
\node (n3) [box] {CANoe};
\node (n4) [box, draw=none] (n4) {Measurement File};
% Connections
\coordinate[below=of n3] (aux);
\draw (n0) edge["{$u[n]$}"] (n1)
(n1) edge["{$e[n]$}"] (n2)
(n2) edge["{$v[n]$}"] (n3)
(n3) edge["{$y[n]$}"] (n4);
\draw (n0) |- node[pos=0.75] {forefeed} (aux)
(aux) edge (n3);
\end{tikzpicture}
\end{document}