I found two more or less appropriate ways to change the arrow size (which is not a solution of the actual problem at hand, namely that at position 1
is not calculated correct):
- less appropriate:
- New arrow head:
_latex
- New style:
arrow line width
that takes a length (the new \pgflinewidth
)
- and
arrow ultra thin
, arrow very thin
, …, arrow ultra thick
that set arrow line width
- more appropriate:
- Re-defining a macro that locally (!) sets a new line width for the arrows.
- New style:
arrow line width
that takes a factor
- and
arrow ultra thin
, arrow very thin
, …, arrow ultra thick
that set arrow line width
(They could even be combined.)
less appropriate: New Arrow Head
I chose to define a new arrow _latex
that is the same as latex
only that \pgflinewidth
is replaced by \pgflinewidth@arrow
.
The length \pgflinewidth@arrow
is per default \pgflinewidth
so the arrow acts as usual unless the key arrow line width
is used explicitly with an arbitrary length. (Sadly, thick
and so on cannot be used, but arrow thick
.)
Improvements could be made that one could use the already existing arrows without any change by finding a good hook to set \pgflinewidth
locally.
For many other way to change the arrow size: Is it possible to change the size of an arrowhead in TikZ/PGF?
Code
\documentclass[tikz,border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\makeatletter
\tikzset{nomorepostaction/.code = \let\tikz@postactions\pgfutil@empty}
\newdimen\pgflinewidth@arrow
\pgfarrowsdeclare{_latex}{_latex}
{
\pgfutil@tempdima=0.28pt%
\pgfutil@tempdimb=\pgflinewidth@arrow%
\ifdim\pgfinnerlinewidth>0pt%
\pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth@arrow-.4*\pgfinnerlinewidth}%
\fi%
\advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
\pgfarrowsleftextend{+-1\pgfutil@tempdima}
\pgfarrowsrightextend{+9\pgfutil@tempdima}
}
{
\pgfutil@tempdima=0.28pt%
\pgfutil@tempdimb=\pgflinewidth@arrow%
\ifdim\pgfinnerlinewidth>0pt%
\pgfmathsetlength\pgfutil@tempdimb{.6\pgflinewidth@arrow-.4*\pgfinnerlinewidth}%
\fi%
\advance\pgfutil@tempdima by.3\pgfutil@tempdimb%
\pgfpathmoveto{\pgfqpoint{9\pgfutil@tempdima}{0pt}}
\pgfpathcurveto
{\pgfqpoint{6.3333\pgfutil@tempdima}{.5\pgfutil@tempdima}}
{\pgfqpoint{2\pgfutil@tempdima}{2\pgfutil@tempdima}}
{\pgfqpoint{-1\pgfutil@tempdima}{3.75\pgfutil@tempdima}}
\pgfpathlineto{\pgfqpoint{-1\pgfutil@tempdima}{-3.75\pgfutil@tempdima}}
\pgfpathcurveto
{\pgfqpoint{2\pgfutil@tempdima}{-2\pgfutil@tempdima}}
{\pgfqpoint{6.3333\pgfutil@tempdima}{-.5\pgfutil@tempdima}}
{\pgfqpoint{9\pgfutil@tempdima}{0pt}}
\pgfusepathqfill
}
\tikzset{
bigdiagramarrow/.style = {
-_latex,
arrow thick
},
arrow line width/.code={
\pgfmathsetlength\pgflinewidth@arrow{#1}
},
arrow line width/.initial=\pgflinewidth,
arrow ultra thin/.style={arrow line width=0.1pt},
arrow very thin/.style={arrow line width=0.2pt},
arrow thin/.style={arrow line width=0.4pt},
arrow semithick/.style={arrow line width=0.6pt},
arrow thick/.style={arrow line width=0.8pt},
arrow very thick/.style={arrow line width=1.2pt},
arrow ultra thick/.style={arrow line width=1.6pt},
}
\makeatother
\begin{document}
\begin{tikzpicture}
\node [draw] (A) at (0, 0) {$A$};
\node [draw] (B) at (0, 1) {$B$};
\node [draw] (C) at (2, 1) {$C$};
\draw [bigdiagramarrow] (A) to (B);
\draw [out = 0, in = 180][bigdiagramarrow] (A) to (C);
\end{tikzpicture}
\end{document}
Output

more appropriate:
Code
\documentclass[tikz,border=2pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\makeatletter
\tikzset{nomorepostaction/.code = \let\tikz@postactions\pgfutil@empty}
\def\pgf@arrowset#1#2{%
\pgfutil@ifundefined{pgf@arrow@code@#2}
{\PackageError{pgf}{Arrow #1 type ``#2'' unknown}{}}
{%
\edef\pgf@arrow@temp{#2}%
\ifx\pgf@arrow@temp\pgfutil@empty% ah. clear!
\expandafter\let\csname pgf@#1arrow\endcsname=\pgfutil@empty%
\expandafter\let\csname pgf@shorten@#1\endcsname=\pgfutil@empty%
\else%
%\pgf@arrow@prepare{#2}%
\expandafter\def\csname pgf@#1arrow\endcsname{\multiply\pgflinewidth by \pgflinewidth@arrow\relax\pgf@arrow@call{#2}}%
\expandafter\edef\csname pgf@shorten@#1\endcsname{\multiply\pgflinewidth by \noexpand\pgflinewidth@arrow\relax\expandafter\noexpand\csname pgf@arrow@right@#2\endcsname}%
\fi%
}%
}
\tikzset{
bigdiagramarrow/.style = {
-latex,
arrow thick
},
arrow line width/.code={
\pgfmathsetmacro\pgflinewidth@arrow{#1}
},
arrow line width=1,
arrow ultra thin/.style={arrow line width=0.25},
arrow very thin/.style={arrow line width=0.5},
arrow thin/.style={arrow line width=1},
arrow semithick/.style={arrow line width=1.5},
arrow thick/.style={arrow line width=2},
arrow very thick/.style={arrow line width=3},
arrow ultra thick/.style={arrow line width=4},
}
\makeatother
\begin{document}
\begin{tikzpicture}
\node [draw] (A) at (0, 0) {$A$};
\node [draw] (B) at (0, 1) {$B$};
\node [draw] (C) at (2, 1) {$C$};
\draw [bigdiagramarrow] (A) to (B);
\draw [out = 0, in = 180][bigdiagramarrow] (A) to (C);
\end{tikzpicture}
\end{document}
Output

at position .9999
. – Qrrbrbirlbel Jan 4 '13 at 3:53\draw (A)
and(A) to (C)
are two distinct paths. So you are not doing anything to theto
path as it is. – percusse Jan 4 '13 at 4:02\draw [bigdiagramarrow] (A) to (B);
? – Qrrbrbirlbel Jan 4 '13 at 4:09