tikz 路径选项的局部性

tikz 路径选项的局部性

我试图通过放置一个节点在箭头上添加一个叉号。但是我遇到了两种奇怪的行为:

  1. 应该被划掉的节点有一个箭头
  2. 箭头受交叉形状中设置的线宽影响

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{scopes}

\begin{document}
\begin{tikzpicture}
    { [every to/.style=bend left]
        \draw[-latex] (1,-1.5) to node[draw, red, sloped, cross out, line width=.5ex, minimum width=1.5ex, minimum height=1ex, anchor=center]{} (0, -.25);
        \draw[-latex] (3,-1.5) to (2, -.25);
    }
\end{tikzpicture}

\end{document}

在此处输入图片描述 注意黑色路径的宽箭头尖和交叉形状中的箭头。图片不太新,但有必要提一下,我需要bend left解释为什么我不能接受彼得的当前解决方案。

我怎样才能解决这个问题(我不太熟悉路径范围)。

答案1

cross out

cross out形状定义了一条仅绘制两条线的前景路径:

\foregroundpath{
  % store lower right in xa/ya and upper right in xb/yb
  \southwest \pgf@xa=\pgf@x \pgf@ya=\pgf@y
  \northeast \pgf@xb=\pgf@x \pgf@yb=\pgf@y
  \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@ya}}
  \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@yb}}
  \pgfpathmoveto{\pgfqpoint{\pgf@xa}{\pgf@yb}}
  \pgfpathlineto{\pgfqpoint{\pgf@xb}{\pgf@ya}}
}

它缺少任何附加设置,因此它继承了上面的任何样式。

我们需要\pgfsetarrows{-}\pgfsetdash{}{0pt}

你可以通过etoolbox以下方式轻松修复这个问题(无需完全重新定义)

\usepackage{etoolbox}
\cspreto{pgf@sh@fg@cross out}{\pgfsetarrows{-}\pgfsetdash{}{0pt}}

仅适用于 TikZ(不是 PGF),但更简单的方法是使用

\tikzset{every cross out node/.append style={-,solid}}

用于重新调整箭头的大小。

看起来节点的线宽设置(而不是通常的线宽设置)以某种方式用于计算箭头尖的大小。我没有简单的解决办法。

你可以做

\draw[-latex,thin] …

其中thin是默认设置 ( .4pt) 或者在样式中使用它every path

every path/.append style={thin}

代码

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usetikzlibrary{scopes}
\tikzset{every cross out node/.append style={-, solid}}
%\usepackage{etoolbox}
%\cspreto{pgf@sh@fg@cross out}{%
%  \pgfsetarrows{-}%
%  \pgfsetdash{}{0pt}%
%}
\begin{document}
\begin{tikzpicture}
    { [bend left, dashed, every path/.append style={thin}]
        \draw[-latex] (1,-1.5) to node[draw=red, sloped, cross out, line width=.5ex, minimum width=1.5ex, minimum height=1ex, anchor=center]{} (0, -.25) ;
        \draw[-latex] (3,-1.5) to (2, -.25);
    }
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案2

一个简单的解决方案是将节点放在末尾并使用选项midway 来定位节点,并选择-确保不添加额外的箭头:

在此处输入图片描述

笔记:

  • 我将使用形式切换to为使用,--因为我不明白为什么to在这种情况下需要,但通过该选项似乎也存在节点放置问题midway

代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{shapes}

\begin{document}
\begin{tikzpicture}
    \draw[-latex] (1,-1.5) --  (0, -.25)
        node[draw, midway, -, red, sloped, cross out, line width=.5ex, minimum width=1.5ex, minimum height=1ex, anchor=center]{};
    \draw[-latex] (3,-1.5) -- (2, -.25);
\end{tikzpicture}

\end{document}

相关内容