我就像 tikz 中两个叠加的两个箭头,例如给定箭头尖Latex
和Circle
,有一种方法可以得到一个新的箭头尖,SuperposeLatexCircle
使得\draw [-{SuperposeLatexCircle}] (A) -- (B)
相当于\draw [-{Latex}] (A) -- (B); \draw [-{Circle}] (A) -- (B)
。
我认为这应该可以使用sep
,例如\draw [-{Latex[sep=-1pt]Circle}] (A) -- (B)
用1pt
替换为更好的值。相关值应该是:
- 默认
sep
:0.88pt .3 1
- 默认
length
为Latex
:+3pt 4.5 .8
我尝试取sep=-3.88pt -4.8 0.9
(前两个部分分别是-0.88pt-3pt
和,我不知道第三个部分该放什么,所以我取了和-.3-4.5
的平均值。这不起作用,但用替换后效果相当接近。1
.8
Circle
Diamond
的问题Circle
可能是它的长度与的长度差别很大Latex
,所以我们可能还需要的默认长度Circle
:
- 默认
length
为Circle
:+2.39365pt +3.191538
我之前考虑过的候选方法sep
:
以下任何一项都会有帮助(按优先顺序递减):
- 一种无需预先声明箭头的组合方式,例如
\draw [-{Superpose[first=Latex, second=Circle]}] (A) -- (B)
;
编辑:我认为可以用负数来做到这一点sep
,例如-{Latex[sep=-1pt]Circle}
,但我不确定如何自动计算正确的 sep。
- 一种无需复制粘贴即可声明组合的方式,例如使用
pgfarrowsdeclarecombine
加上一些移位来取消两个箭头之间的移动,或者类似
\pgfdeclarearrow{
name=CombineLatexCircle,
% ...
drawing code={
\pgf@ar@code@Latex
\pgf@ar@code@Circle
},
% ...
}
(对于定义的某些组成部分来说,这似乎很难做到)
- 一些系统的复制和粘贴方式允许组合两个
\pgfdeclarearrow
声明,例如“连接绘图代码,丢弃默认值,更改设置和绘图代码中的所有名称以避免冲突,...”
答案1
这是实现此目的的一种方法。定义一个样式,将圆尖端放置在线段的末端,并用箭头调用它Latex
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.markings}
\tikzset{
circarr/.style={
decoration={
markings,
mark=at position 1 with {\arrow{Circle}}
},
postaction={decorate}
}
}
\begin{document}
\begin{tikzpicture}
\draw [-{Latex}] (0,0) -- (1,0); \draw [-{Circle}] (0,0) -- (1,0);
\draw [-{Latex}, circarr] (0,.5) -- (1,.5);
\end{tikzpicture}
\end{document}
或者,您可以circarr
绘制两个箭头:
\tikzset{
circarr/.style={
decoration={
markings,
mark={at position 1 with {\arrow{Circle}}, at position 1 with {\arrow{Latex}}}
},
postaction={decorate}
}
}
使用 可创建与上述相同的输出。您可以使用和代替\draw [circarr] (0,.5) -- (1,.5);
为线段开头的箭头创建另一种样式。position 0
\arrowreversed
\arrow
circarrb
这是一个同时实现了(开始)和circarre
(结束)的MWE :
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{decorations.markings}
\tikzset{
circarre/.style={
decoration={
markings,
mark={at position 1 with {\arrow{Circle}}, at position 1 with {\arrow{Latex}}}
},
postaction={decorate}
},
circarrb/.style={
decoration={
markings,
mark={at position 0 with {\arrowreversed{Circle}}, at position 0 with {\arrowreversed{Latex}}}
},
postaction={decorate}
}
}
\begin{document}
\begin{tikzpicture}
\draw [circarre] (0,0) -- (1,0);
\draw [circarrb] (0,.5) -- (1,.5);
\draw [circarrb,circarre] (0,1) -- (1,1);
\end{tikzpicture}
\end{document}
答案2
/tikz/tips
(和/pgf/tips
)是控制当基本路径是退化路径或不是draw
n 时是否绘制箭头的选项。
对于tips=true
,即使没有绘制基本路径,箭头也会被绘制。所以我将它与postaction
\documentclass[border=9,tikz]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\tikz{
\draw[tips=true,
postaction=-Latex,
postaction=-Circle,
postaction=-|,
]
(0,0)--(1,0);
}
\end{document}