используйте команду let, чтобы нарисовать одну стрелку с углом поворота

используйте команду let, чтобы нарисовать одну стрелку с углом поворота

Я нашел один хороший пример кодаздесьи попробуйте переформатировать его с помощью letкоманды и определить один newcommandдля удобства использования.

Ниже представлен мой черновой вариант, но он не может пройти компиляцию:

\documentclass[border=10mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.arrows, calc}
\newcommand{\dbarr}[4] {
  \path (#1) -- (#2) 
    let 
        \p1=($(#1) - $(#2)),
        \n{height}={veclen(\x1,\y1)}, 
        \n{angle}={atan2(\y1,\x1)} in 
    node[midway, single arrow, draw=black, 
        minimum width=15mm, minimum height=\n{height}, 
        inner sep=0mm, single arrow head extend=1mm, double arrow head extend=1mm,
        fill=cyan!20,double arrow,rotate=\n{angle}] (#3) {#4};    
}
\begin{document}
    \begin{tikzpicture}
    \coordinate (A) at (0,0);
    \coordinate (B) at (2,2);
    \dbarr{A}{B}{C}{from A to B};
    \end{tikzpicture}
\end{document}

Ошибка:

Runaway argument?
$(B)), \n {height}={veclen(\x 1,\y 1)}, \n {angle}={atan2(\y 1,\x 1)}\ETC.
! File ended while scanning use of \tikz@cc@parse@factor.
<inserted text> 
                \par 
<*> a.tex
         
? x
No pages of output

Мне сложно понять, в чем заключается эта ошибка. Буду признателен, если кто-нибудь сможет мне помочь!

решение1

Код компилируется, если \p1=($(#1) - $(#2))заменить его на \p1=($(#1) - (#2)$)(обратите внимание на положение $).

Связанный контент