Ändern Sie den Stil der Pfeilspitze in Dekorationen und Markierungen

Ändern Sie den Stil der Pfeilspitze in Dekorationen und Markierungen

Ich möchte eine Linie mit einer Pfeilspitze in der Mitte zeichnen und habe die Bibliothek „decoration.markings“ samt \arrowBefehl gefunden, die nur dort verfügbar ist.

Allerdings habe ich nur wenige Informationen darüber gefunden, welche Optionen und Pfeilspitzen für den \arrowBefehl verfügbar sind.

Durch Ausprobieren gelang es mir, einen einfachen Pfeil in der Mitte der Linie zu erzeugen mit

\tikzset{kb/.style={postaction={decorate,decoration={markings,mark=at position .5 with {\arrow{angle 90};}}}}}

Aber wie kann ich die Darstellung der Pfeilspitze ändern, sie also beispielsweise mit einem Kreis drumherum versehen oder zwei Pfeilspitzen direkt hintereinander haben?

Antwort1

Ihre Frage lautet also: Wie lassen sich neue Arten von Pfeilspitzen definieren, um sie als Dekoration zu verwenden?

Die Definition neuer Pfeilspitzen ist unabhängig davon, wo Sie sie verwenden, entweder als Teil eines \draw[->]Befehls oder als Teil des \arrowBefehls innerhalb einer Dekoration. Der Teil des Handbuchs, der die Definition neuer Pfeilarten behandelt, istSeite 784.

Im Allgemeinen ist es schwierig, beliebige Formen für die Pfeile zu definieren, da Sie dazu Befehle auf niedriger Ebene verwenden müssen pgf*. Wenn Sie außerdem möchten, dass der Pfeil Stile akzeptiert und skalierbar ist, müssen Sie sich mit Metapfeilen (Seite 785) vertraut machen.

Allerdings haben Sie in Ihrer Frage zwei konkrete Beispiele genannt, die leicht herzustellen sind, da es sich dabei um Kombinationen bereits vorhandener Pfeilspitzen handelt.

  1. Eine Pfeilspitze mit einem Kreis darum. Sie können den vorhandenen latexPfeil mit der vorhandenen o(kreisförmigen) Pfeilspitze kombinieren, indem Sie \pgfarrowsdeclarecombine. Dieser Befehl setzt standardmäßig eine Pfeilspitze nach der anderen, aber Sie können einen Versatz angeben, der die zweite verschiebt. In diesem Fall habe ich (durch Ausprobieren) herausgefunden, dass dies -5ptdas gewünschte Ergebnis liefert.

  2. Zwei Pfeilspitzen direkt hintereinander. Command \pgfarrowsdeclaredoubleist genau dafür konzipiert.

Sehen Sie sich den folgenden Code an:

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,decorations.markings,arrows}

\pgfarrowsdeclarecombine[-5pt]{circled}{circled}{latex}{latex}{o}{o}
\pgfarrowsdeclaredouble{doubled}{doubled}{stealth}{stealth}

\tikzset{
kb1/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{circled};}}}
   },
kb2/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{doubled};}}}
   },   
}

\begin{document}
\begin{tikzpicture}%
    \draw[kb1] (0,0) -- + (2,0);
    \draw[kb2] (0,.5) -- + (2,0);
\end{tikzpicture}
\end{document}

was ergibt:

Ergebnis

Aktualisieren

Der OP hat in einem Kommentar darauf hingewiesen, dass angle 90der Kreis zu klein ist, wenn die Art des Pfeils ist.

Das Beheben des Problems ist etwas schwierig und mühsam.

Standardpfeile sind nicht anpassbar. Dazu müssen Sie „Metapfeile“ verwenden. Diese Art erfordert die neueste Version von pgf/tikz und das Paket arrows.meta, in dem neue Namen für die Pfeilspitzen definiert sind. Beispielsweise wird der „hohle Kreis“-Pfeil Circle[open]anstelle von genannt o, und der Straight BarbPfeil ersetzt den angle 90einen. SieheSeite 202 des neuesten pgfmanual.

Ich weiß jedoch nicht, ob es möglich ist, den verschiedenen Teilen eines „zusammengesetzten Pfeils“ unterschiedliche Optionen zuzuweisen. Wir müssen dem „Winkel 90“ und dem „Kreis“ unterschiedliche Größen zuweisen, und ich weiß nicht, wie das geht.

Aber ich habe einen Hack gefunden. Wenn Sie die neuen Meta-Pfeile nur für den Kreis verwenden und die alten arrow 90für die Spitze verwenden, werden die von Ihnen übergebenen Optionen \arrownur für den „Meta“-Teil des zusammengesetzten Pfeils verwendet und auf diese Weise wird nur die Größe des Kreisteils geändert.

Verwendung dieser Idee:

\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,decorations.markings,arrows,arrows.meta}

\pgfarrowsdeclarecombine[-2mm]{circled}{circled}{angle 90}{angle 90}{Circle[open]}{Circle[open]}
\pgfarrowsdeclaredouble{doubled}{doubled}{angle 90}{angle 90}

\tikzset{
kb1/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{circled[width=3mm,length=3mm]};}}}
   },
kb2/.style={postaction={decorate,
   decoration={markings,mark=at position .5 with {\arrow{doubled};}}}
   },   
}

\begin{document}
\begin{tikzpicture}%
    \draw[kb1] (0,0) -- + (2,0);
    \draw[kb2] (0,.5) -- + (2,0);
\end{tikzpicture}
\end{document}

Ergebnis:

Ergebnis

verwandte Informationen