我怎样才能在 tikz 中划掉箭头?

我怎样才能在 tikz 中划掉箭头?

我正在使用以下代码使用 tikz 绘制有向无环图(DAG):

\usepackage{tikz}

\small{\begin{tikzpicture}[%
 ->,
 shorten >=2pt,
 >=stealth,
 node distance=1cm,
 pil/.style={
 ->,
 thick,
 shorten =2pt,}
 ]
 \node (1) {A};
 \node[left=of 1] (2) {L};
 \node[right=of 1] (3) {Y};
 \draw [->] (2.east) -- (1.west);
 \draw [->] (1.east) -- (3.west);
 \draw [->] (2) to [out=15, in=165] (3);
 \end{tikzpicture}}

我希望能够在从 L 到 A 的箭头(代码中的第一个箭头)上画一条斜线或删除线,以表明分析方法完全删除了这种关联。

在此处输入图片描述

我怎样修改代码才能做到这一点?

答案1

一种方法是从中点画一条对角线,xy通过宏设置,\StrikeThruDistance如红色删除线所示。

您还可以定义自定义箭头,就像strike thru arrow我下面定义的样式一样,如蓝色箭头所示。

在此处输入图片描述

代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usetikzlibrary{decorations.markings}

\newcommand*{\StrikeThruDistance}{0.15cm}%
\newcommand*{\StrikeThru}{\StrikeThruDistance,\StrikeThruDistance}%


\tikzset{strike thru arrow/.style={
    decoration={markings, mark=at position 0.5 with {
        \draw [blue, thick,-] 
            ++ (-\StrikeThruDistance,-\StrikeThruDistance) 
            -- ( \StrikeThruDistance, \StrikeThruDistance);}
    },
    postaction={decorate},
}}

\begin{document}


\small{\begin{tikzpicture}[%
 ->,
 shorten >=2pt,
 >=stealth,
 node distance=1cm,
 pil/.style={
     ->,
     thick,
     shorten =2pt,}
 ]
 \node (1) {A};
 \node[left=of 1] (2) {L};
 \node[right=of 1] (3) {Y};
 \draw [->] (2.east) -- (1.west);
    % Manually draw the strike thru
    \coordinate (MidWay) at ($(2.east)!0.5!(1.west)$);
    \draw [thick, red,-] ($(MidWay)-(\StrikeThru)$) -- 
            ($(MidWay)+(\StrikeThru)$);
 \draw [->, strike thru arrow] (1.east) -- (3.west);
 \draw [->] (2) to [out=15, in=165] (3);
 \end{tikzpicture}}
\end{document}

答案2

手动可以使用另一种方法:

1)我删除了,->, shorten >=2pt因为我认为最好定义一种新的风格,比如pil

m2)我确定了位于箭头中间的新坐标。

3) 您可以使用($ ...$)功能或使用旧方法shift。我在下一个示例中使用了两种可能性。

\documentclass{article}
\usepackage{tikz}

\begin{document}

\small{\begin{tikzpicture}[%
 >=stealth,
 node distance = 1cm,
 pil/.style    = { ->,
                   thick,
                   shorten =2pt}]
 \node (1) {A};
 \node[left=of 1] (2) {L};
 \node[right=of 1] (3) {Y};
 \draw [->] (2.east) -- coordinate (m) (1.west);
 \draw[blue,shift={(m)}](-0.1,-0.1)--(0.1,+0.1);
 \draw [->] (1.east) -- coordinate (m)(3.west);
 \draw[red]($(m)+(-0.1,-0.1)$)--($(m)+(0.1,+0.1)$);
 \draw [->] (2) to [out=15, in=165] (3);
 \end{tikzpicture}}

\end{document}

在此处输入图片描述

答案3

(可能是重复的)问题提供了一个有趣的替代方案:只需使用斜线来排版删除线。

主要优点是命令简单,特别是当箭头倾斜且打击杆需要相应旋转时。但代价是无法控制打击杆的外观。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}
\usetikzlibrary{arrows}
\usetikzlibrary{decorations.markings}

\begin{document}

\small{\begin{tikzpicture}[%
 ->,
 shorten >=2pt,
 >=stealth,
 node distance=1cm,
 pil/.style={
 ->,
 thick,
 shorten =2pt,}
 ]
 \node (1) {A};
 \node[left=of 1] (2) {L};
 \node[right=of 1] (3) {Y};
 \draw [->] (2.east) -- (1.west) node[pos=0.5,red,sloped] {\tiny$/$};
 \draw [->] (1.east) -- (3.west) node[pos=0.5,blue,sloped] {\tiny$/$};
 \draw [->] (2) to [out=15, in=165] (3);
 \end{tikzpicture}}

\end{document}

输出

相关内容