我想制作一个箭头,箭头是一个实心圆,周围有圆弧。我可以通过把Arc Barb
和Circle
放在一起来实现这一点,但问题是它们的间距会根据箭头是在起点还是终点而断开:
\documentclass[margin=3mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{circuits.ee.IEC}
\newcommand*{\ioport}{[sep=1mm]{Arc Barb}[reversed,scale=1.6,sep=-1mm]{Circle}}
\tikzset
{ >={direction ee}
}
\pgfsetarrowoptions{direction ee}{5pt}
\begin{document}
\begin{tikzpicture}
\draw[{\ioport<}-{<\ioport}] (0,0) -- (10,0);
\draw[{\ioport>}-{>\ioport}] (10,-1) -- (0,-1);
\end{tikzpicture}
\end{document}
结果显示,箭头在行尾处与我想要的完全一致,但它在行首处却散开了:
我想进行改变\ioport
以便它可以在边缘的两端使用。
我发现一个可怕的解决方法是为两个行尾创建两个不同的命令:
\newcommand*{\ioportstart}{[sep=1mm]{Circle}[sep=0mm]{Arc Barb}[reversed,sep=-1mm,scale=1.6]}
\newcommand*{\ioportend}{[sep=1mm]{Arc Barb}[reversed,sep=-1mm,scale=1.6]{Circle}[sep=0mm]}
但我确实想避免在两个行端使用不同的名称。
答案1
我不确定您想要哪一个箭头,但例如,查看手册第 210 页,我想到了这个:
\documentclass[margin=3mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{circuits.ee.IEC}
\tikzset{myr/.tip = {<[sep=1mm]{Arc Barb}[scale=1.6,sep=0mm]{Circle}},
my-my/.tip = {myr[reversed]},
>={direction ee},
}
\pgfsetarrowoptions{direction ee}{5pt}
\begin{document}
\begin{tikzpicture}
\draw[my-] (0,-2) -- ++(10,0) node[midway, fill=white]{1};
\draw[-my] (0,-3) -- ++(10,0) node[midway, fill=white]{2};
\draw[my-my] (0,-4) -- ++(10,0) node[midway, fill=white]{3};
\draw[my-] (10,-5) -- ++(-10,0) node[midway, fill=white]{4};
\draw[-my] (10,-6) -- ++(-10,0) node[midway, fill=white]{5};
\draw[my-my] (10,-7) -- ++(-10,0) node[midway, fill=white]{6};
\end{tikzpicture}
\end{document}
基本上,您定义从右到左的提示(我认为,不要相信我从左到右的陈述!)然后该my-my
技巧会扩展到三种基本形式。
答案2
这只是 @Rmano 优秀答案的扩展。通过尝试,似乎不需要先定义一个提示,然后将其扩展到两个方向。-它只需一个提示即可工作:
\documentclass[margin=3mm,tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{circuits.ee.IEC}
\tikzset{my/.tip = {>[sep=1mm]{Arc Barb}[scale=1.6, reversed, sep=-1mm]{Circle}}, >={direction ee}
}
\begin{document}
\begin{tikzpicture}
\draw[my-] (0,-2) -- ++(10,0) node[midway, fill=white]{1};
\draw[-my] (0,-3) -- ++(10,0) node[midway, fill=white]{2};
\draw[my-my] (0,-4) -- ++(10,0) node[midway, fill=white]{3};
\draw[my-] (10,-5) -- ++(-10,0) node[midway, fill=white]{4};
\draw[-my] (10,-6) -- ++(-10,0) node[midway, fill=white]{5};
\draw[my-my] (10,-7) -- ++(-10,0) node[midway, fill=white]{6};
\end{tikzpicture}
\end{document}
答案3
核选项是放弃组合箭头,并自己绘制:
\pgfarrowsdeclare{io}{io}
{
\pgfarrowsleftextend{-8\pgflinewidth}
\pgfarrowsrightextend{8\pgflinewidth}}
{
\pgfpathcircle{\pgfpoint{8\pgflinewidth}{0}}{4\pgflinewidth}
\pgfusepathqfill
\pgfpathmoveto{\pgfpoint{8\pgflinewidth}{-8\pgflinewidth}}
\pgfpatharc{270}{90}{8\pgflinewidth}
\pgfusepathqstroke
}
\newcommand*{\ioport}{[sep=1mm]{io}[sep=1mm]}