
Ich möchte eine Linie mit einer Pfeilspitze in der Mitte zeichnen und habe die Bibliothek „decoration.markings“ samt \arrow
Befehl gefunden, die nur dort verfügbar ist.
Allerdings habe ich nur wenige Informationen darüber gefunden, welche Optionen und Pfeilspitzen für den \arrow
Befehl 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 \arrow
Befehls 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.
Eine Pfeilspitze mit einem Kreis darum. Sie können den vorhandenen
latex
Pfeil mit der vorhandeneno
(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-5pt
das gewünschte Ergebnis liefert.Zwei Pfeilspitzen direkt hintereinander. Command
\pgfarrowsdeclaredouble
ist 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:
Aktualisieren
Der OP hat in einem Kommentar darauf hingewiesen, dass angle 90
der 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 Barb
Pfeil ersetzt den angle 90
einen. 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 90
für die Spitze verwenden, werden die von Ihnen übergebenen Optionen \arrow
nur 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: