为带有文本的箭头定义新的节点形状

为带有文本的箭头定义新的节点形状

我想改进我的 tikz 节点处理。我经常使用这个:

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\draw [thick,-latex] (1,0)+(0,-1.5mm)--+(0,1.5mm)+(0,0)--+(5mm,0) node[below]{$y_1$};
\draw [thick,-latex] (0,0)+(-1.5mm,0)--+(1.5mm,0)+(0,0)--+(0,5mm) node[right]{$y_1$};
\end{tikzpicture}
\end{document}

结果

在此处输入图片描述

我不想每次都完整地绘制这个箭头,而是定义一个 tikz 节点并按如下方式使用它:

\node[coordinate_arrow] at (1,0){$y_1$};
% rotated arrow with non rotated label
\node[coordinate_arrow, rotate=90] at (0,0){$y_1$};

我的第一个方法是:

\tikzset{
  coordinate_arrow/.style={
        execute at begin node={
            \begin{tikzpicture}
                \draw[thick] (0,-1.5mm)--(0,1.5mm);
                \draw[thick, -latex] (0,0)--(5mm,0);
            \end{tikzpicture}
        },
    }
}

但这里对齐不适合(必须是交叉点或箭头根)并且标签不在同一个位置。


怎样做才正确?



按照你的建议,我使用以下方法实现tikzset

\tikzset{
    pics/coordinate_arrow/.style = {
        code={
            \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
            \pgfmathsetmacro{\myrot}{atan2(\tmpd,\tmpc)}
            \draw[thick, -latex] (0,-1.5mm)--(0,1.5mm) 
                (0,0)--(5mm,0)node[anchor=\myrot]{#1};
        }
    }
}

现在可以这样使用它:

\begin{tikzpicture}
    \draw (0,0) pic[rotate=90]{coordinate_arrow={$y_1$}};
    \draw (0,1) pic[rotate=45]{coordinate_arrow={$y_2$}};
    \draw (1,1) pic[rotate=270]{coordinate_arrow={$y_3$}};
    \draw (1,0) pic{coordinate_arrow={$y_4$}};
\end{tikzpicture}

在此处输入图片描述

非常感谢!

答案1

我建议不要使用您的方法,因为它会嵌套tikzpicture环境。相反,请使用pic

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[pics/marrow/.style={code={
  \pgfgettransformentries{\tmpa}{\tmpb}{\tmpc}{\tmpd}{\tmp}{\tmp}%
  \pgfmathsetmacro{\myrot}{atan2(\tmpd,\tmpc)}
  \draw[thick, -latex] (0,-1.5mm)--(0,1.5mm) 
      (0,0)--(5mm,0)node[anchor=\myrot]{#1};}}]
%
 \path (0,0) pic[rotate=90]{marrow={$y_1$}} (1,0) pic{marrow={$y_1$}};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容