Tikz: Posicionamiento de flechas

Tikz: Posicionamiento de flechas

Tengo un problema para obtener la posición correcta de las 2 flechas en el lado derecho. Quiero que estén "en el medio".

GSM

Código:

\documentclass[12pt,a4paper]{scrartcl}
\begin{document}
\usetikzlibrary{decorations.markings}
\usepackage{tikz}
\begin{figure}[htbp]
\centering
\begin{minipage}[b]{.4\linewidth}
    \begin{tikzpicture}
    \node (System) [draw,minimum size=24mm] {Motor};
    \coordinate[above left = of System.west] (a1);
    \coordinate[below = 7mm of a1] (a2);
    \coordinate[below = 7mm of a2] (a3);
    \coordinate[below = 6.5mm of a3] (a4);
    \coordinate[above right= of System.east] (b1);
    \foreach \i [count=\xi from 1] in {2,...,5}
        \coordinate[below=of b\xi] (b\i);
    \foreach \i [count=\xi from 1] in {$u_\mathrm{a}$,$i_\mathrm{a}$,$u_\mathrm{f}$,$i_\mathrm{f}$}
    \draw[-latex'] (a\xi) node[left] {\i} -- (a\xi-| System.west);
    \foreach \i [count=\xi from 1] in {$n$,$M$}
        \draw[-latex'] (System.east |- b\xi) -- (b\xi) node[right] {\i};
    \end{tikzpicture}
    \caption{GSM als Motor}
    \label{fig:gsmmotor}
\end{minipage}
\qquad
\begin{minipage}[b]{.4\linewidth}
    \begin{tikzpicture}
        \node (System) [draw,minimum size=24mm] {Generator};
        \coordinate[above left = of System.west] (a1);
        \coordinate[below = 7mm of a1] (a2);
        \coordinate[below = 7mm of a2] (a3);
        \coordinate[below = 6.5mm of a3] (a4);
        \coordinate[above right= of System.east] (b1);
        \foreach \i [count=\xi from 1] in {2,...,5}
            \coordinate[below=of b\xi] (b\i);
        \foreach \i [count=\xi from 1] in {$n$,$M$,$u_\mathrm{f}$,$i_\mathrm{f}$}
        \draw[-latex'] (a\xi) node[left] {\i} -- (a\xi-| System.west);
        \foreach \i [count=\xi from 1] in {$u_a$,$i_a$}
            \draw[-latex'] (System.east |- b\xi) -- (b\xi) node[right] {\i};
        \end{tikzpicture}
        \caption{GSM als Generator}
        \label{fig:gsmgenerator}
\end{minipage}
\end{figure}
\end{document}

¿Cómo puedo centrar las flechas?

¡Gracias!

Respuesta1

Residencia enmi respuesta:

\documentclass[12pt,a4paper]{scrartcl}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
                positioning}

\begin{document}
    \begin{figure}[htbp]
    \centering
\begin{minipage}[b]{.4\linewidth}
\centering
    \begin{tikzpicture}[
node distance = 3mm and 12mm
                        ]
\node (System) [draw,minimum size=24mm] {Motor};
%
\coordinate[above  left = of System.west, label=left:$u_a$]   (a2);
\coordinate[above   = 6mm of a2, label=left:$i_a$]            (a1);
\coordinate[below  left = of System.west, label=left:$u_f$] (a3);
\coordinate[below   = 6mm of a3, label=left:$u_f$]          (a4);
%
\coordinate[above right = of System.east, label=right:$n$] (b1);
\coordinate[below right = of System.east, label=right:$M$] (b2);
%
\foreach \i in {1,...,4}{\draw[-Latex]   (a\i) -- (a\i -| System.west);}
\foreach \i in {1,2}{\draw[-Latex]   (b\i -| System.east) -- (b\i);}
    \end{tikzpicture}
\caption{GSM als Motor}
\label{fig:mimo}
\end{minipage}
\hfil
\begin{minipage}[b]{.4\linewidth}
\centering
    \begin{tikzpicture}[
node distance = 3mm and 12mm
                        ]
\node (System) [draw,minimum size=24mm] {Generator};
%
\coordinate[above  left = of System.west, label=left:$n$]   (a2);
\coordinate[above   = 6mm of a2, label=left:$M$]            (a1);
\coordinate[below  left = of System.west, label=left:$u_3$] (a3);
\coordinate[below   = 6mm of a3, label=left:$u_2$]          (a4);
%
\coordinate[above right = of System.east, label=right:$u_a$] (b1);
\coordinate[below right = of System.east, label=right:$i_a$] (b2);
%
\foreach \i in {1,...,4}{\draw[-Latex]   (a\i) -- (a\i -| System.west);}
\foreach \i in {1,2}{\draw[-Latex]   (b\i -| System.east) -- (b\i);}
    \end{tikzpicture}
\caption{GSM als Generator}
\label{fig:mimo}
\end{minipage}
    \end{figure}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

No necesitas bibliotecas para eso, ni comandos complicados. Con pos=<fraction>puede agregar una coordenada en alguna posición de facción de los bordes respectivos y luego agregar las flechas y los nodos. Todo esto es tan simple como decir

\path (System.south west) -- (System.north west)  
    foreach \X/\Z  in {0.05/i_f,0.35/u_f,0.65/M,0.95/n}
    {coordinate[pos=\X](aux)  (aux) edge[latex-] ++ (-1,0) 
    node[left=1cm]{$\Z$}};

MWE:

\documentclass[12pt,a4paper]{scrartcl}
\usepackage{tikz}
\begin{document}
\begin{figure}[htbp]
\centering
\begin{minipage}[b]{.4\linewidth}
  \begin{tikzpicture}
    \node (System) [draw,minimum size=24mm] {Motor};
    \path (System.south west) -- (System.north west)  
    foreach \X/\Z  in {0.05/i_f,0.35/u_f,0.65/M,0.95/n}
    {coordinate[pos=\X](aux)  (aux) edge[latex-] ++ (-1,0) 
    node[left=1cm]{$\Z$}};
    \path (System.south east) -- (System.north east)  
    foreach \X/\Z in {0.3/u_a,0.7/i_a}
    {coordinate[pos=\X] (aux) (aux) edge[-latex] ++ (1,0) node[right=1cm]{$\Z$}};
  \end{tikzpicture}
  \caption{GSM als Motor.}
 \label{fig:gsmmotor}
\end{minipage}
\qquad
\begin{minipage}[b]{.4\linewidth}
  \begin{tikzpicture}
    \node (System) [draw,minimum size=24mm] {Motor};
    \path (System.south west) -- (System.north west)  
    foreach \X/\Z  in {0.05/i_f,0.35/u_f,0.65/M,0.95/n}
    {coordinate[pos=\X](aux)  (aux) edge[latex-] ++ (-1,0) 
    node[left=1cm]{$\Z$}};
    \path (System.south east) -- (System.north east)  
    foreach \X/\Z in {0.3/u_a,0.7/i_a}
    {coordinate[pos=\X] (aux) (aux) edge[-latex] ++ (1,0) node[right=1cm]{$\Z$}};
  \end{tikzpicture}
  \caption{GSM als Generator.}
  \label{fig:gsmgenerator}
\end{minipage}
\end{figure}
\end{document}

ingrese la descripción de la imagen aquí

Respuesta3

  1. Para colocar dos flechas en elmedio, consideré que querías(espero no equivocarme)estas dos flechas para señalar elterceroydos terciosdel lado. Para ello utilizo la calcbiblioteca, que me permite localizar a estos terceros con precisión:

    \coordinate (u) at ($(System.north east)!.3333!(System.south east)$);
    \coordinate (i) at ($(System.north east)!.6666!(System.south east)$);

captura de pantalla

  1. Para colocar el arrowhorizontalmente, primero coloco el texto al rightde cadatercerodel nodo Sistema, luego dibuje la flecha con la edgesintaxis:

          \node[right =of u]{$n$}edge[<-](u);  
          \node[right =of i]{$M$}edge[<-](i);
    
  2. Me tomé la libertad de colocar las dos figuras al lado de TikZ. Para hacer esto, coloqué a cada uno de ellos en un scopeentorno y moví el segundo con xshift=7cm. Le he dado un nombre a cada entorno de alcance: local bounding box=motory local bounding box=generator, lo que me permite colocar el texto debajo con mucha facilidad.

    \begin{scope}[local bounding box=motor]
    % code for figure 1
    % ...
    \end{scope}
    \node [anchor=north,text width=6cm]at (motor.south) {\captionof{figure}{GSM als Motor}}; % caption text

    \begin{scope}[xshift=7cm,local bounding box=generator] % code for figure 2 % .... \end{scope} \node [anchor=north,text width=6cm]at (generator.south) {\captionof{figure}{GSM als Generator}}; % caption text

  3. Para no numerar manualmente las cifras, como subrayaTorbjørn T.En mi primera solución, utilizo el capt-ofpaquete que permite numerar objetos no flotantes.

  4. Entonces, comenté todas las líneas de tu código que ya no uso (sin eliminarlas).

Traducido con www.DeepL.com/Translator

\documentclass[12pt,a4paper]{scrartcl}
\usepackage{tikz,capt-of}
\usetikzlibrary{decorations.markings,positioning,arrows,calc}
\begin{document}


%\begin{figure}[htbp]
\centering
%\begin{minipage}[b]{.4\linewidth}
\begin{tikzpicture}
    \begin{scope}[local bounding box=motor]
    \node (System) [draw,minimum size=24mm] {Motor};
    \coordinate[above left = of System.west] (a1);
    \coordinate[below = 7mm of a1] (a2);
    \coordinate[below = 7mm of a2] (a3);
    \coordinate[below = 6.5mm of a3] (a4);
    \coordinate[above right= of System.east] (b1);
    \foreach \i [count=\xi from 1] in {2,...,5}
        \coordinate[below=of b\xi] (b\i);
    \foreach \i [count=\xi from 1] in {$u_\mathrm{a}$,$i_\mathrm{a}$,$u_\mathrm{f}$,$i_\mathrm{f}$}
        \draw[-latex'] (a\xi) node[left] {\i} -- (a\xi-| System.west);
%   \foreach \i [count=\xi from 1] in {$n$,$M$}
%        \draw[-latex'] (System.east |- b\xi) -- (b\xi) node[right] {\i};   

    \coordinate (u) at ($(System.north east)!.3333!(System.south east)$);
    \coordinate (i) at ($(System.north east)!.6666!(System.south east)$);
    \node[right =of u]{$n$}edge[<-](u);  
    \node[right =of i]{$M$}edge[<-](i);    
    \end{scope}
    %\node[anchor=north,yshift=-5mm] at (motor.south){Figure\,1: GSM als Motor};
   \node [anchor=north,text width=6cm]at (motor.south) {\captionof{figure}{GSM als Motor}};
%    \end{tikzpicture}
%    \caption{GSM als Motor}
%    \label{fig:gsmmotor}
%\end{minipage}
%\qquad
%\begin{minipage}[b]{.4\linewidth}
%    \begin{tikzpicture}

\begin{scope}[xshift=7cm,local bounding box=generator]
    \node (System) [draw,minimum size=24mm] {Generator};
    \coordinate[above left = of System.west] (a1);
    \coordinate[below = 7mm of a1] (a2);
    \coordinate[below = 7mm of a2] (a3);
    \coordinate[below = 6.5mm of a3] (a4);
    \coordinate[above right= of System.east] (b1);
    \foreach \i [count=\xi from 1] in {2,...,5}
            \coordinate[below=of b\xi] (b\i);
    \foreach \i [count=\xi from 1] in {$n$,$M$,$u_\mathrm{f}$,$i_\mathrm{f}$}
        \draw[-latex'] (a\xi) node[left] {\i} -- (a\xi-| System.west);
%   \foreach \i [count=\xi from 1] in {$u_a$,$i_a$}
%       \draw[-latex'] (System.east |- b\xi) -- (b\xi) node[right] {\i};

    \coordinate (u) at ($(System.north east)!.3333!(System.south east)$);
    \coordinate (i) at ($(System.north east)!.6666!(System.south east)$);
    \node[right =of u]{$u_a$}edge[<-](u);  
    \node[right =of i]{$i_a$}edge[<-](i);
 \end{scope}
%\node[anchor=north,yshift=-5mm] at (generator.south){Figure\,2: GSM als Generator};
\node [anchor=north,text width=6cm]at (generator.south) {\captionof{figure}{GSM als Generator}};
\end{tikzpicture}
%        \caption{GSM als Generator}
        \label{fig:gsmgenerator}
%\end{minipage}
%\end{figure}
\end{document}

información relacionada