
Я сейчас пишу свою бакалаврскую диссертацию с использованием LaTex и Tikz, и сейчас я застрял. Хотя мои старые посты очень помогли мне со многими вещами, касающимися tikz, для неопытного пользователя всегда есть новые трудности...
Я хотел бы получить изображение, подобное этому, где я мог бы давать стрелкам имена и, что самое важное, изменять их размер (или расстояние между узлами по отдельности?).
Я зашел так далеко, но, как вы видите, я не знаю, как сделать стрелку ниже, которая соединяет входной узел с третьим блоком, и я не знаю, как сократить расстояние между тремя блоками. Вот моя картинка:
... и мой код
\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}
Я загрузил все важные пресеты (babel, tikz и т. д.)
Я был бы рад, если бы кто-то мог мне помочь! Спасибо вам, ребята, я действительно ценю помощь!
решение1
Используйте node distance
для интервала в of
. Чтобы нарисовать дополнительные стрелки, почему бы просто не нарисовать «обычные» стрелки?
РЕДАКТИРОВАТЬ:Чтобы добавить текст к этой стрелке, вам нужно немного ее изменить.
ПРАВКА 2:Чтобы изменить начальную точку стрелки, вам просто нужно назвать середину первой стрелки. Кстати, edge
это не обязательно, просто --
нормально.
\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}
решение2
Вы также можете использовать \foreach
для уменьшения размера кода. Чтобы изменить расстояние между узлами локально, просто используйте, right=<some length> of
как также отметил @Fractal. Кроме того, стрелку вниз-вправо-вверх можно упростить до \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}
решение3
В случае, если вам не нужны метки на ребрах между узлами в цепочке, то код вашей блочной схемы можно просто нарисовать с помощью библиотеки chains
, а для стрелок между ними использовать макрос join
. Метка стрелки добавляется только к стрелке, которая связывает "вход" с "CANoe", и к узлу, соответственно расположенному на стрелке:
\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}
В случае, если вы хотите, чтобы все края были помечены, то их join
можно заменить стрелками с метками. Для них удобно использовать quotes
библиотеку:
\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}