Does a zero-length line with an arrow make sense? Is it a bug?
With pstricks.tex
from http://archiv.dante.de/~herbert/texnik/tex/generic/pstricks/ \psLine
can have only one or two pairs of coordinates. Will later be on CTAN.
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node,multido}
\begin{document}
\multido{\i=0+30}{12}{%
\begin{pspicture}(-2,-2)(2,2)
\pscircle{1}
\pnode(1;\i){R}
\psset{arrows=->}
\psLine(R)
\psLine[linecolor=blue](R|0,0)
\psLine[linecolor=red](0,0|R)
\psset{linecolor=gray,linestyle=dashed,linewidth=0.5\pslinewidth,arrows=-,dash=2pt 2pt}
\psLine(R)(R|0,0)
\psLine(R)(0,0|R)
\end{pspicture}}
\end{document}
In TikZ, you can avoid drawing arrow heads if the last segment of a path has a length of zero by patching the internal \pgf@check@for@arrows
macro:
\makeatletter
\def\pgf@check@for@arrows{%
\pgf@drawarrowsfalse%
\ifx\pgf@startarrow\pgfutil@empty\else\pgf@drawarrowstrue\fi%
\ifx\pgf@endarrow\pgfutil@empty\else\pgf@drawarrowstrue\fi%
\ifdim\pgf@shorten@end@additional=0pt\relax\else\pgf@drawarrowstrue\fi%
\ifdim\pgf@shorten@start@additional=0pt\relax\else\pgf@drawarrowstrue\fi%
\ifpgf@drawarrows%
\pgfsyssoftpath@getcurrentpath\pgf@arrowpath%
\ifx\pgf@arrowpath\pgfutil@empty%
\pgf@drawarrowsfalse%
\else%
\pgfprocesscheckclosed{\pgf@arrowpath}{\pgf@drawarrowsfalse}%
%%% New stuff starts here
% Extract first, second, second last and last points
\pgfprocesspathextractpoints{\pgf@arrowpath}%
% If the second last and last points are identical ...
\ifx\pgfpointsecondlastonpath\pgfpointlastonpath%
% ... disable the arrow head
\pgf@drawarrowsfalse%
\fi%
%%% New stuff ends here
\fi%
\fi%
}
\makeatother
\documentclass[tikz,border=0pt]{standalone}
\usepackage{tikz}
\makeatletter
\def\pgf@check@for@arrows{%
\pgf@drawarrowsfalse%
\ifx\pgf@startarrow\pgfutil@empty\else\pgf@drawarrowstrue\fi%
\ifx\pgf@endarrow\pgfutil@empty\else\pgf@drawarrowstrue\fi%
\ifdim\pgf@shorten@end@additional=0pt\relax\else\pgf@drawarrowstrue\fi%
\ifdim\pgf@shorten@start@additional=0pt\relax\else\pgf@drawarrowstrue\fi%
\ifpgf@drawarrows%
\pgfsyssoftpath@getcurrentpath\pgf@arrowpath%
\ifx\pgf@arrowpath\pgfutil@empty%
\pgf@drawarrowsfalse%
\else%
\pgfprocesscheckclosed{\pgf@arrowpath}{\pgf@drawarrowsfalse}%
\pgfprocesspathextractpoints{\pgf@arrowpath}%
\ifx\pgfpointsecondlastonpath\pgfpointlastonpath%
\pgf@drawarrowsfalse%
\fi%
\fi%
\fi%
}
\makeatother
\begin{document}
\foreach \angle in {0,5,...,355}{%
\begin{tikzpicture}[
scale=1.5,
arrow/.style={
-stealth, thick, line cap=round
}
]
\fill [white] (-1.02,-1.02) rectangle (1.02, 1.02);
\draw [gray, densely dashed] (0:{cos(\angle)}) |- (90:{sin(\angle)});
\draw (0,0) circle [radius=1];
\draw [blue, arrow] (0,0) -- (0:{cos(\angle)});
\draw [red, arrow] (0,0) -- (90:{sin(\angle)});
\draw [black, arrow] (0,0) -- (\angle:1);
\end{tikzpicture}%
}
\end{document}