tikz add tag
Diaa
Following up [the discussion here](https://topanswers.xyz/transcript?room=1618&id=85338#c85338), I would like to make the custom designed current flow arrow have the following properties:

1- The arrow should be a vector whose length is equal to the vector magnitude constructed by the start and end points and its angle/direction is set by the coordinates of the start/end points.

2- normal line keys of `line width`, `shorten`, `xshift` (w.r.t the start/end points), `yshift` (w.r.t the line connecting the start/end points), etc should be able to be passed to it.

3- the label (e.g. $I_a$ here) has to be centered and paralleled to the arrow as well.

4- normal label options (`label distance`, `label position`, etc) need to be passed to it.

![image.png](/image?hash=c5825167fcd959b2c1a7d1f86f7e0cd48467b4354fa6393b30cdf652eb451f76)

```
\documentclass[tikz,border=3mm]{standalone}
\usepackage{adjustbox}
\usepackage[american, siunitx , RPvoltages]{circuitikz}
\usetikzlibrary{arrows.meta,calc,decorations.markings,positioning}

\tikzset{pics/flow arrow/.style={code={\tikzset{flow arrow pars/.cd,#1}
			\def\pv##1{\pgfkeysvalueof{/tikz/flow arrow pars/##1}}	
			\draw[/tikz/flow arrow pars/arrow,
			to path={(\tikztostart)--(\tikztotarget) \tikztonodes}] (-\pv{l}/2,\pv{d}) 
			to[edge label={\pv{t}},edge label'={\pv{t'}},allow upside down=false]
			(\pv{l}/2,\pv{d});
	}},flow arrow/.style={to path={
			(\tikztostart) -- pic[sloped,allow upside down]{flow arrow={#1}} (\tikztotarget)}},
	flow arrow pars/.cd,
	l/.initial=2em,d/.initial=1.5ex,arrow/.style={-Latex},t/.initial={},t'/.initial={}}


\begin{document}
		\begin{tikzpicture}
			\draw[semithick] (0,2) to[ R=$R_a$, name=Ra, o-] ++(2,1) 
			pic{flow arrow={t={$I_a$}}}
			to[L,cute inductor, l=$L_a$, name=La, -.]  ++(2,1);
		\end{tikzpicture}
\end{document}
```
Top Answer
marmot
Presumably this will need iterations but here is a basic version that allows you to either put the `pic` as usual or to place it between two anchors. It can be a basis for discussions. There are already a number of keys (and some may disappear or change):
* `t` is the key for the node content (`t` as `text`).
* `d` is the "vertical" distance between the arrow than the path it labels.
* `l` is the length of the arrow. It will be ignored if you use the `between` key because you wanted the length to be controlled by the distance of the start and end points.
* `between` takes two arguments, e.g. `flow arrow={between={Ra.east and La.west}`. You can alternatively say `from=Ra.east` and `to=La.west`.
* `shorten scale` tells Ti*k*Z to make the arrow shorter than the line it decorates. For instance, the initial value `shorten scale=0.5` says it should be only 50%, if you use `shorten scale=0.8` it will be 80%.
* `pos` indicates the position of the label text on the arrow, its initial value of `0.5` means in the middle.
* `edge label` is a style that can be filled with keys and styles that alter the appearance of the arrow.
```
\documentclass{article}
\usepackage{tikz}
\usepackage[american, siunitx , RPvoltages]{circuitikz}
\usetikzlibrary{arrows.meta,calc}
\tikzset{pics/flow arrow/.style={code={\tikzset{flow arrow pars/.cd,#1}
	\def\pv##1{\pgfkeysvalueof{/tikz/flow arrow pars/##1}}	
	\def\tikzflowarrownone{-}
	\edef\tikzflowarrowfrom{\pv{from}}
	\edef\tikzflowarrowto{\pv{to}}
	\edef\tikzflowarrowfromto{0}
	\ifx\tikzflowarrowfrom\tikzflowarrownone
	 \else
	 \ifx\tikzflowarrowto\tikzflowarrownone
	  \else
	   \edef\tikzflowarrowfromto{1}
	 \fi
	\fi
	\ifcase\tikzflowarrowfromto
	\draw[/tikz/flow arrow pars/arrow,
		to path={(\tikztostart)--(\tikztotarget) \tikztonodes}] 
		(-\pv{l}/2,\pv{d})
		-- node[pos=\pv{pos},above,transform shape,flow arrow pars/edge label]{\pv{t}}
	(\pv{l}/2,\pv{d});
	\or
	  \pgfmathsetmacro{\tikzflowarrowfromfraction}{0.5-\pv{shorten scale}*0.5}
	  \pgfmathsetmacro{\tikzflowarrowtofraction}{0.5+\pv{shorten scale}*0.5}
	  \draw[/tikz/flow arrow pars/arrow,
		  to path={(\tikztostart)--(\tikztotarget) \tikztonodes}] 
% 		  ($(\tikzflowarrowfrom)!\tikzflowarrowfromfraction!(\tikzflowarrowto)$)
% 		  coordinate (aux1)
% 		  ($(\tikzflowarrowfrom)!\tikzflowarrowtofraction!(\tikzflowarrowto)$)
% 		  coordinate (aux2)
% 		  (aux1) -- (aux2)
  	     ($ ($(\tikzflowarrowfrom)!\tikzflowarrowfromfraction!(\tikzflowarrowto)$)!\pv{d}!90:($(\tikzflowarrowfrom)!\tikzflowarrowtofraction!(\tikzflowarrowto)$) $)
 		  -- 
		  node[pos=\pv{pos},above,transform shape,sloped,flow arrow pars/edge label]{\pv{t}}
          ($ ($(\tikzflowarrowfrom)!\tikzflowarrowtofraction!(\tikzflowarrowto)$)!\pv{d}!-90:($(\tikzflowarrowfrom)!\tikzflowarrowfromfraction!(\tikzflowarrowto)$) $)
	  ;
	\fi
}},flow arrow/.style={to path={
 (\tikztostart) -- pic[sloped,allow upside down]{flow arrow={#1}} (\tikztotarget)}},
 flow arrow pars/.cd,
	l/.initial=2em,d/.initial=1.5ex,arrow/.style={-Latex},
	pos/.initial=0.5,edge label/.style={},
	t/.initial={},t'/.initial={},
	between/.code args={#1 and #2}{\tikzset{flow arrow pars/from=#1,
		flow arrow pars/to=#2}},from/.initial=-,to/.initial=-,
	shorten scale/.initial=0.5
	}
\begin{document}
\begin{itemize}
 \item place \texttt{pic} via \texttt{pos}:\hfill
\begin{tikzpicture}[baseline=8em]
	\draw[semithick] (0,2) to[ R=$R_a$, name=Ra, o-] 
	pic[sloped,pos=1]{flow arrow={t={$I_a$}}}
	++(2,1) 
	to[L,cute inductor, l=$L_a$, name=La, -.]  ++(2,1);
\end{tikzpicture}\hfill\mbox{}\par

 \item place \texttt{pic} via \texttt{between}:\hfill
\begin{tikzpicture}[baseline=8em]
	\draw[semithick] (0,2) to[ R=$R_a$, name=Ra, o-] 
	++(2,1) 
	to[L,cute inductor, l=$L_a$, name=La, -.]  ++(2,1)
	pic{flow arrow={between={Ra.east and La.west},t={$I_a$}}};
\end{tikzpicture}\hfill\mbox{}\par
\end{itemize}
\end{document}
```
![Screen Shot 2020-12-28 at 1.17.56 PM.png](/image?hash=48c28c20d18f00f7611c2fbba49c4a2743a309a3c0ffe4e8dcaf8300beb8ecb9)

Enter question or answer id or url (and optionally further answer ids/urls from the same question) from

Separate each id/url with a space. No need to list your own answers; they will be imported automatically.