
Estoy intentando recrear este diagrama:
El mío ya se ve bastante bien, pero a la conexión entre el nodo Environment
y Sensor
le falta el segundo ángulo recto y espacio para el measured by
texto.
¿Cómo puedo hacer para agregar el espacio necesario al nodo?
Además, ¿es posible cargar un tikz
diagrama desde un archivo externo?
Este es el código para un MWE (Puedes jugar con él aquíhttps://www.overleaf.com/3051741jzxtvm#/8435913/)
\documentclass[tikz, border=10pt]{standalone}
\usepackage{verbatim}
\tikzset{
vertex/.style = {
circle,
fill = black,
outer sep = 2pt,
inner sep = 1pt,
}
}
\begin{document}
\begin{tikzpicture}[node distance = 2cm, auto]
[
post/.style={->,shorten >=1pt,semithick}
]
% Nodes
\node[draw] (Sensor) at (2,0) {Sensor};
\node[draw] (Comparator) at (6,0) {Comparator};
\node[draw] (Actuator) at (10,0) {Actuator};
\node[draw] (Feedback) at (13,2) {Feedback};
\node[draw] (Environment) at (6,-2) {Environment};
\node[draw] (Disturbances) at (6,-4) {Disturbances};
\node at (1, 1) {\textbf{ Input}};
\node at (11, 1) {\textbf{ Output}};
\draw[->,draw=red] (Sensor) to node {alerts} (Comparator);
\draw[->,draw=red] (Comparator) to node {drives} (Actuator);
\draw[-, draw=red] (Actuator) -| node[pos=0.25] {affects} (Feedback);
\draw[->, draw=red] (Feedback) |- (Environment);
\draw[->, draw=red] (Environment) -| node {measured by} (Sensor);
\draw[<-,draw=red] (Environment) to node {affect} (Disturbances);
\end{tikzpicture}
\end{document}
Respuesta1
Una alternativa, que utiliza cadenas y posicionamiento de tikzlibrary:
\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{chains,positioning}
\usepackage{verbatim}
\begin{document}
\begin{tikzpicture}[
node distance = 2cm, auto,
start chain = going right,
box/.style = {rectangle, draw, on chain}]
% Nodes
\node[box] (Sensor) {Sensor};
\node[box] (Comparator) {Comparator};
\node[box] (Actuator) {Actuator};
\node[box,above right=of Actuator] (Feedback) {Feedback};
\node[box,below=of Comparator] (Environment) {Environment};
\node[box,below=of Environment] (Disturbances) {Disturbances};
% Lines
\draw[->,draw=red] (Sensor) to node {alerts} (Comparator);
\draw[->,draw=red] (Comparator) to node {drives} (Actuator);
\draw[-, draw=red] (Actuator) -| node[pos=0.25] {affects}
node[pos=0.25,above=1cm] {\textbf{ Output}}
(Feedback);
\draw[->,draw=red] (Feedback) |- (Environment);
\draw[->,draw=red] (Environment) -| ([xshift=-2.4cm] Sensor.west) --
node[above] {measured by}
node[above=1cm] {\textbf{ Input}} (Sensor.west);
\draw[<-,draw=red] (Environment) to node {affect} (Disturbances);
\end{tikzpicture}
\end{document}
Respuesta2
Tomado del código de ejemplo de Zarko
\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{chains,positioning}
\usepackage{verbatim}
\usepackage{xcolor}
\DefineNamedColor{named}{BrickRed} {cmyk}{0,0.89,0.94,0.28}
\DefineNamedColor{named}{DarkRed} {cmyk}{0.4,0.89,0.94,0.28}
\renewcommand{\familydefault}{\sfdefault}
\begin{document}
\begin{tikzpicture}[
node distance = 2cm, auto,
start chain = going right,
box/.style = {rectangle, draw, on chain}]
\tikzset{>=latex}
\tikzstyle{nodebox}=[box,draw=none,font=\bf]
\tikzstyle{redline}=[-,BrickRed,draw=BrickRed,ultra thick]
\tikzstyle{redliner}=[redline,->]
\tikzstyle{redlinel}=[redline,<-]
\tikzstyle{darklabel}=[below,DarkRed]
% Nodes
\node[nodebox] (Sensor) {Sensor};
\node[nodebox] (Comparator) {Comparator};
\node[nodebox] (Actuator) {Actuator};
\node[nodebox,above right=of Actuator] (Feedback) {Feedback};
\node[nodebox,below=of Comparator] (Environment) {Environment};
\node[nodebox,below=of Environment] (Disturbances) {Disturbances};
% Lines
\draw[redliner] (Sensor) to node[darklabel] {alerts} (Comparator);
\draw[redliner] (Comparator) to node[darklabel] {drives} (Actuator);
\draw[redline] (Actuator) -| node[darklabel,pos=0.25] {affects}
node[pos=0.25,above=1em,DarkRed,font=\bf] {Output} (Feedback);
\draw[redliner] (Feedback) |- (Environment);
\draw[redliner] (Environment) -| ([xshift=-2.4cm] Sensor.west) --
node[darklabel] {measured by}
node[above=1em,DarkRed,font=\bf] {Input} (Sensor.west);
\draw[redlinel] (Environment) to node[DarkRed] {affect} (Disturbances);
\end{tikzpicture}
\end{document}
Respuesta3
Aquí hay un truco rápido:
\draw[->, draw=red] (Environment) -| ($(Sensor)+(-3,0)$)
|- node[anchor=south west] {measured by} (Sensor);
necesitas agregar \usetikzlibrary{calc}
al preámbulo.
($(Sensor)+(-3,0)$)
agrega una coordenada adicional a la ruta. (-3,0)
es el desplazamiento del (Sensor)
nodo.
Actualizar(inspirado en la respuesta de Zarko)
En lugar de ($(Sensor)+(-3,0)$)
puedes usar ([xshift=-2.4cm] Sensor.west)
. No es necesario incluir tikz
bibliotecas adicionales.