Tikz: Positionierung der Pfeile

Tikz: Positionierung der Pfeile

Ich habe ein Problem damit, die beiden Pfeile auf der rechten Seite richtig zu positionieren. Ich möchte, dass sie „in der Mitte“ sind.

GSM

Code:

\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}

wie kann ich die Pfeile zentrieren?

Danke!

Antwort1

Bezogen aufmeine Antwort:

\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}

Bildbeschreibung hier eingeben

Antwort2

Sie benötigen dafür weder Bibliotheken noch komplizierte Befehle. Mit pos=<fraction>können Sie an einer beliebigen Position der jeweiligen Kanten eine Koordinate hinzufügen und dann die Pfeile und Knoten hinzufügen. Das alles ist so einfach wie zu sagen

\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}

Bildbeschreibung hier eingeben

Antwort3

  1. Um zwei Pfeile in derMitte, ich dachte, du wolltest(ich hoffe, ich irre mich nicht)diese beiden Pfeile zeigen auf diedritteUndzwei Drittelder Seite. Dazu verwende ich die calcBibliothek, die es mir ermöglicht, diese Drittanbieter genau zu lokalisieren:

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

Bildschirmfoto

  1. Um die arrowhorizontal zu platzieren, platziere ich zuerst den Text an der rightvon jedemdrittedes Systemknotens und zeichnen Sie dann den Pfeil mit der edgeSyntax:

          \node[right =of u]{$n$}edge[<-](u);  
          \node[right =of i]{$M$}edge[<-](i);
    
  2. Ich habe mir die Freiheit genommen, die beiden Figuren mit TikZ nebeneinander zu platzieren. Dazu habe ich jede von ihnen in eine scopeUmgebung gesetzt und die zweite mit verschoben xshift=7cm. Jedem Bereich habe ich einen Namen gegeben: local bounding box=motorund local bounding box=generator, wodurch ich den Text sehr einfach darunter platzieren kann.

    \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. Um die Abbildungen nicht manuell zu nummerieren, wie unterstrichen durchTorbjørn TIn meiner ersten Lösung verwende ich das capt-ofPaket, das die Nummerierung nicht schwebender Objekte ermöglicht.

  4. Daher habe ich alle Zeilen Ihres Codes kommentiert, die ich nicht mehr verwende (ohne sie zu löschen).

Übersetzt mit 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}

verwandte Informationen