Diagrama Tikz: ângulo reto e espaço adicionais

Diagrama Tikz: ângulo reto e espaço adicionais

Estou tentando recriar este diagrama:

insira a descrição da imagem aqui

O meu já parece muito bom, mas a conexão entre o nó Environmente Sensorfalta o segundo ângulo reto e espaço para o measured bytexto.

insira a descrição da imagem aqui

Como posso adicionar o espaço necessário ao nó?

Além disso, é possível carregar um tikzdiagrama de um arquivo externo?

Este é o código para um MWE (você pode brincar com ele aquihttps://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}

Responder1

Uma alternativa, que usa cadeias e posicionamento da 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}

insira a descrição da imagem aqui

Responder2

Retirado do código de exemplo 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}

insira a descrição da imagem aqui

Responder3

Aqui está um hack rápido:

\draw[->, draw=red] (Environment) -| ($(Sensor)+(-3,0)$) 
  |- node[anchor=south west] {measured by} (Sensor);

você precisa adicionar \usetikzlibrary{calc}ao preâmbulo.

($(Sensor)+(-3,0)$)adiciona uma coordenada adicional ao caminho. (-3,0)é o deslocamento do (Sensor)nó.

Atualizar(inspirado na resposta de Zarko)

Em vez de ($(Sensor)+(-3,0)$)você pode usar ([xshift=-2.4cm] Sensor.west). Não há necessidade de incluir tikzbibliotecas adicionais.

insira a descrição da imagem aqui

informação relacionada