更改decorations.markings中箭頭的樣式

更改decorations.markings中箭頭的樣式

我想畫一條中間有箭頭的線,並找到decoration.markings 庫以及\arrow僅在那裡可用的命令。

然而,我發現很少有資訊可用於該命令的選項和箭頭\arrow

經過反覆試驗,我能夠在線上中間產生一個簡單的箭頭

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

但是我怎麼能改變箭頭的樣式,也就是讓它周圍有一個圓圈或一個接一個地有兩個箭頭?

答案1

所以你的問題是如何定義新類型的箭頭提示以將其用作裝飾?

新箭頭提示的定義與您使用它們的位置無關,無論是作為命令的一部分\draw[->],還是作為\arrow,還是作為裝飾內命令。手冊中涵蓋新箭頭類型定義的部分是第784頁

一般來說,定義箭頭的任意形狀很困難,因為您必須使用低階pgf*命令。此外,如果您希望箭頭接受樣式並可擴展,則必須了解元箭頭(第 785 頁)。

但是,在您的問題中,您給出了兩個特定的範例,這些範例很容易生成,因為它們是先前存在的箭頭提示的組合。

  1. 一個箭頭,周圍有一圈。您可以透過 將現有latex箭頭與現有o(圓形)箭頭提示組合起來\pgfarrowsdeclarecombine。預設情況下,此指令將一個箭頭提示放在另一個箭頭提示之後,但您可以指定移動第二個箭頭提示的偏移量。在這種情況下,我發現(透過反覆試驗)可以-5pt產生所需的結果。

  2. 兩個箭頭一前一後。 Command\pgfarrowsdeclaredouble正是為此而設計的。

看下面的程式碼:

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

其產生:

結果

更新

OP在評論中指出,如果箭頭是angle 90,那麼圓圈就太小了。

修復它有點困難和黑客。

標準箭頭不可自訂,為此您必須使用「元箭頭」。這些類型需要最新版本的 pgf/tikz 和 package arrows.meta,其中定義了箭頭提示的新名稱。例如,「空心圓」箭頭被命名Circle[open]o,而Straight Barb箭頭則取代了angle 90箭頭。看最新 pgf 手冊的第 202 頁

但是,我不知道是否可以將不同的選項傳遞給“複合箭頭”的不同部分。我們需要為“90°角”和“圓”提供不同的尺寸,但我不知道該怎麼做。

但我發現了一個黑客。如果您只對圓圈使用新的元箭頭,而將舊的元箭頭留給尖端arrow 90,則您傳遞給的選項\arrow將僅用於複合箭頭的「元」部分,這樣只有圓圈部分的大小會被調整。

使用這個想法:

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

結果:

結果

相關內容