我想畫一條中間有箭頭的線,並找到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 頁)。
但是,在您的問題中,您給出了兩個特定的範例,這些範例很容易生成,因為它們是先前存在的箭頭提示的組合。
一個箭頭,周圍有一圈。您可以透過 將現有
latex
箭頭與現有o
(圓形)箭頭提示組合起來\pgfarrowsdeclarecombine
。預設情況下,此指令將一個箭頭提示放在另一個箭頭提示之後,但您可以指定移動第二個箭頭提示的偏移量。在這種情況下,我發現(透過反覆試驗)可以-5pt
產生所需的結果。兩個箭頭一前一後。 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}
結果: