我正在使用以下代码使用 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
一种方法是从中点画一条对角线,x
并y
通过宏设置,\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
m
2)我确定了位于箭头中间的新坐标。
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}