如何使两个 tikz 箭头叠加?

如何使两个 tikz 箭头叠加?

我就像 tikz 中两个叠加的两个箭头,例如给定箭头尖LatexCircle,有一种方法可以得到一个新的箭头尖,SuperposeLatexCircle使得\draw [-{SuperposeLatexCircle}] (A) -- (B)相当于\draw [-{Latex}] (A) -- (B); \draw [-{Circle}] (A) -- (B)

我认为这应该可以使用sep,例如\draw [-{Latex[sep=-1pt]Circle}] (A) -- (B)1pt替换为更好的值。相关值应该是:

我尝试取sep=-3.88pt -4.8 0.9(前两个部分分别是-0.88pt-3pt和,我不知道第三个部分该放什么,所以我取了和-.3-4.5的平均值。这不起作用,但用替换后效果相当接近。1.8CircleDiamond

的问题Circle可能是它的长度与的长度差别很大Latex,所以我们可能还需要的默认长度Circle


我之前考虑过的候选方法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)是控制当基本路径是退化路径或不是drawn 时是否绘制箭头的选项。

对于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}

相关内容