% Copyright 2018 by Till Tantau % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. % % See the file doc/generic/pgf/licenses/LICENSE for more details. \ProvidesFileRCS{pgflibraryarrows.meta.code.tex} % % % Meta keys % % \newdimen\pgfarrowinset \newdimen\pgfarrowlength \newdimen\pgfarrowwidth \newdimen\pgfarrowlinewidth \newif\ifpgfarrowroundcap \newif\ifpgfarrowroundjoin \pgfarrowsaddtolengthscalelist\pgfarrowlength \pgfarrowsaddtolengthscalelist\pgfarrowinset \pgfarrowsaddtowidthscalelist\pgfarrowwidth \pgfkeys{ /pgf/arrow keys/.cd, length/.code={% \pgfarrowsthreeparameters{#1}% \expandafter\pgfarrowsaddtooptions\expandafter{\expandafter\pgfarrowslinewidthdependent\pgfarrowstheparameters\pgfarrowlength\pgf@x}% }, inset/.code={% \pgfarrowsthreeparameters{#1}% \expandafter\pgfarrowsaddtolateoptions\expandafter{\expandafter\pgfarrowslinewidthdependent\pgfarrowstheparameters\pgfarrowinset\pgf@x}% }, inset'/.code={ \pgfarrowsthreeparameters{#1}% \expandafter\pgfarrowsaddtolateoptions\expandafter{\expandafter\pgfarrowslengthdependent\pgfarrowstheparameters\pgfarrowinset}% }, line width/.code={% \pgfarrowsthreeparameters{#1}% \expandafter\pgfarrowsaddtolateoptions\expandafter{\expandafter\pgfarrowslinewidthdependent\pgfarrowstheparameters\pgfarrowlinewidth\pgf@x}% }, line width'/.code={ \pgfarrowsthreeparameters{#1}% \expandafter\pgfarrowsaddtolateoptions\expandafter{\expandafter\pgfarrowslengthdependent\pgfarrowstheparameters\pgfarrowlinewidth}% }, width/.code={% \pgfarrowsthreeparameters{#1}% \expandafter\pgfarrowsaddtolateoptions\expandafter{\expandafter\pgfarrowslinewidthdependent\pgfarrowstheparameters\pgfarrowwidth\pgf@x}% }, width'/.code={% \pgfarrowsthreeparameters{#1}% \expandafter\pgfarrowsaddtolateoptions\expandafter{\expandafter\pgfarrowslengthdependent\pgfarrowstheparameters\pgfarrowwidth}% }, angle/.code={% \pgfarrowsfourparameters{#1}% \expandafter\pgfarrowsaddtooptions\expandafter{\expandafter\pgfarrows@angle@setup\pgfarrowstheparameters}% }, angle'/.code={ \pgfarrowsaddtolateoptions{\pgfarrows@angle@setup@prime{#1}}% }, % line cap/.is choice, line cap/butt/.code=\pgfarrowsaddtooptions{\pgfarrowroundcapfalse}, line cap/round/.code=\pgfarrowsaddtooptions{\pgfarrowroundcaptrue}, line join/.is choice, line join/miter/.code=\pgfarrowsaddtooptions{\pgfarrowroundjoinfalse}, line join/round/.code=\pgfarrowsaddtooptions{\pgfarrowroundjointrue}, round/.style={line cap=round,line join=round}, sharp/.style={line cap=butt,line join=miter}, }% % % % Classification of arrow tips: % % % Barbs % ----- % % These arrow tips consisting of stroked lines starting at the tip, % typically going backward. They cannot be filled, only stroked % % A special case are the arrows mimicking the tip at the end of a % \rightarrow command. % % % Geometric % --------- % % The arrow tips have a geometric form like a triangle or a % "stealth" fighter or a kite. They can be filled and/or stroked. % % % Caps % ---- % % These arrow tips have their width fixed to the line width and % provide different ways of adding a "cap" to the end of a line. This % allows one to use more than just the standard "round cap", "butt % cap" and "rect cap" and, additionally, one can one kind of cap at % one end and another at the other end. % % % Other % ----- % % Special purpose arrow tips. % % % % Barbs arrow tips % % % An Straight Barb yields a simple angle \pgfdeclarearrow{ name = Straight Barb, defaults = { length = +1.5pt 2, width' = +0pt 2, line width = +0pt 1 1, }, setup code = { % Compute front miter length: \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowlength}{\pgf@sys@tonumber\pgfarrowwidth}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x4\pgf@x% \advance\pgf@x by1pt% \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter \pgf@xc.5\pgf@xc \pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter % Set ends \ifpgfarrowroundjoin \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by.5\pgfarrowlinewidth} \else \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by\pgf@xc\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi} \fi \pgfarrowssetvisualbackend{\pgfarrowlength\advance\pgf@x by.5\pgfarrowlinewidth} \pgfarrowssetbackend{-.5\pgfarrowlinewidth} % harpoon miter correction \ifpgfarrowreversed \pgfarrowssetlineend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf@x by.5\pgfarrowlinewidth\fi} \else \pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth} \fi % The hull: \ifpgfarrowroundjoin \pgfarrowshullpoint{\pgfarrowlength\advance\pgf@x by.5\pgfarrowlinewidth}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}% \else% \ifpgfarrowharpoon \pgfarrowshullpoint{\pgfarrowlength\advance\pgf@x by\pgf@xc\advance\pgf@x by\pgf@xa}{-.5\pgfarrowlinewidth}% \else \pgfarrowshullpoint{\pgfarrowlength\advance\pgf@x by\pgf@xc\advance\pgf@x by\pgf@xa}{0pt}% \fi% \fi \pgfarrowsupperhullpoint{.5\pgfarrowlinewidth}{.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth}% \pgfarrowsupperhullpoint{-.5\pgfarrowlinewidth}{.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth}% \ifpgfarrowharpoon \pgfarrowshullpoint{-.5\pgfarrowlinewidth}{-.5\pgfarrowlinewidth}% \fi % The following are needed in the code: \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowwidth }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \pgfpathmoveto{\pgfqpoint{0pt}{.5\pgfarrowwidth}} \pgfpathlineto{\pgfqpoint{\pgfarrowlength}{0pt}} \ifpgfarrowharpoon \pgfpathlineto{\pgfqpoint{\pgfarrowlength\advance\pgf@x by\ifpgfarrowreversed\else-\fi\pgfarrowlinewidth}{0pt}} \else \pgfpathlineto{\pgfqpoint{0pt}{-.5\pgfarrowwidth}} \fi \pgfusepathqstroke }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \ifpgfarrowharpoon h\fi% \ifpgfarrowroundjoin j\fi% \ifpgfarrowroundcap c\fi% }, }% % % % Hooks are barbs that consist of an arc going forward from the line % end and curving back by a given angle specified using the |arc| % key. \pgfkeys{ /pgf/arrow keys/.cd, arc/.code={% \pgfmathparse{#1}% \expandafter\pgfarrowsaddtooptions\expandafter{\expandafter\def\expandafter\pgfarrowarc\expandafter{\pgfmathresult}} } }% \def\pgfarrowarc{180}% \pgfdeclarearrow{ name = Hooks, defaults = { length = +0.75pt 1.25, width' = +0pt 4 -1, line width = +0pt 1 1, }, setup code = { \ifpgfarrowharpoon \pgfarrowshullpoint{.5\pgfarrowlength}{-.5\pgfarrowlinewidth} \pgfarrowshullpoint{\pgfarrowlength}{-.5\pgfarrowlinewidth\advance\pgf@y by.125\pgfarrowwidth} \fi \ifdim\pgfarrowarc pt<90.1pt \pgfarrowsupperhullpoint{0pt}{.25\pgfarrowwidth\ifpgfarrowroundcap\else\advance\pgf@y by-.25\pgfarrowlinewidth\fi} \pgfarrowsupperhullpoint{\pgfarrowlength}{.25\pgfarrowwidth\ifpgfarrowroundcap\else\advance\pgf@y by-.25\pgfarrowlinewidth\fi} \else% \pgfarrowsupperhullpoint{\pgfarrowlength}{.375\pgfarrowwidth} \pgfarrowsupperhullpoint{.5\pgfarrowlength}{.5\pgfarrowwidth} \ifdim\pgfarrowarc pt>180pt \pgfarrowsupperhullpoint{-.5\pgfarrowlength}{.5\pgfarrowwidth} \pgfarrowsupperhullpoint{-\pgfarrowlength}{.375\pgfarrowwidth} \pgfarrowsupperhullpoint{-\pgfarrowlength}{.25\pgfarrowwidth} \else \pgfarrowsupperhullpoint{\ifpgfarrowroundcap-.5\pgfarrowlinewidth\else0pt\fi}{.25\pgfarrowwidth} \pgfarrowsupperhullpoint{\ifpgfarrowroundcap-.5\pgfarrowlinewidth\else0pt\fi}{.5\pgfarrowwidth} \fi \fi % Adjust width and length: Take line thickness into account: \advance\pgfarrowlength by-.5\pgfarrowlinewidth \advance\pgfarrowwidth by-\pgfarrowlinewidth \ifpgfarrowreversed \ifpgfarrowroundjoin \pgfarrowssetbackend{-.5\pgfarrowlinewidth} \fi \fi % There are four different intervals for the values of % \pgfarrowsarc that give rise to four different settings of tip % ends and so on: % % Case 1: 0 <= Angle < 90 % \ifdim\pgfarrowarc pt<90pt% % Tip end is given by sin(pgfarrowarc)*length \pgfmathsin@{\pgfarrowarc} \pgfarrowssettipend{\pgfmathresult\pgfarrowlength\advance\pgf@x by.5\pgfarrowlinewidth}% \else\ifdim\pgfarrowarc pt<180pt% \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by.5\pgfarrowlinewidth}% \ifpgfarrowroundcap\pgfarrowssetbackend{-.5\pgfarrowlinewidth}\fi% \else\ifdim\pgfarrowarc pt<270pt% \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by.5\pgfarrowlinewidth}% \ifdim\pgfarrowarc pt>180pt % Back end is given by sin(pgfarrowarc)*length \pgfmathsin@{\pgfarrowarc} \pgfarrowssetbackend{\pgfmathresult\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth}% \else \ifpgfarrowroundcap\pgfarrowssetbackend{-.5\pgfarrowlinewidth}\fi% \fi% \else% \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by.5\pgfarrowlinewidth}% \pgfarrowssetbackend{-\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth}% \fi\fi\fi% \ifpgfarrowreversed \pgfarrowssetlineend{.5\pgfarrowlinewidth} \else% \ifpgfarrowharpoon \pgfarrowssetlineend{0pt} \else \pgfarrowssetlineend{.25\pgfarrowlinewidth} \fi \fi % Adjust arc: \pgf@x\pgfarrowarc pt% \advance\pgf@x by-90pt% \edef\pgfarrowarc{\pgf@sys@tonumber\pgf@x}% % The following are needed in the code: \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowwidth \pgfarrowssave\pgfarrowarc }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi {% \pgftransformxscale{+\pgfarrowlength} \pgftransformyscale{+.25\pgfarrowwidth} \pgfpathmoveto{\pgfpointpolar{+\pgfarrowarc}{+1pt}\advance\pgf@y by1pt} \pgfpatharc{\pgfarrowarc}{+-90}{+1pt} \ifpgfarrowharpoon \else \pgfpatharc{+90}{+-\pgfarrowarc}{+1pt} \fi } \ifpgfarrowharpoon\ifpgfarrowreversed \pgfpathlineto{\pgfqpoint{\pgflinewidth}{0pt}} \fi\fi \pgfusepathqstroke }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \pgfarrowarc,% \ifpgfarrowharpoon h\fi% \ifpgfarrowroundjoin j\fi% \ifpgfarrowroundcap c\fi% }, }% \pgfdeclarearrow{ name = Arc Barb, defaults = { length = +1.5pt 2, width' = +0pt 2, line width = +0pt 1 1, }, setup code = { % Adjust arc: \pgf@x\pgfarrowarc pt% \pgf@x.5\pgf@x% \edef\pgfarrowarc{\pgf@sys@tonumber\pgf@x}% % The tips: \pgfarrowssettipend{\pgfarrowlength} \pgfarrowssetvisualbackend{\pgfarrowlength} \pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth} % The hull: \pgfarrowsupperhullpoint{\pgfarrowlength}{.25\pgfarrowwidth} \ifpgfarrowharpoon\pgfarrowshullpoint{\pgfarrowlength}{-.5\pgflinewidth}\fi \pgfmathsincos@{\pgfarrowarc}% \pgf@xa.5\pgfarrowwidth% \pgfarrowsupperhullpoint{\pgfmathresultx\pgfarrowlength}{\pgfmathresulty\pgf@xa} \ifdim\pgfarrowarc pt>60pt \pgfarrowsupperhullpoint{.5\pgfarrowlength}{\ifdim\pgfarrowarc pt<90pt\pgfmathresulty\pgf@xa\else.5\pgfarrowwidth\fi} \fi \ifdim\pgfarrowarc pt>90pt \ifdim\pgfarrowarc pt<120pt \pgfarrowsupperhullpoint{\pgfmathresultx\pgfarrowlength}{.5\pgfarrowwidth} \else \pgfarrowsupperhullpoint{-.5\pgfarrowlength}{.5\pgfarrowwidth} \ifdim\pgfarrowarc pt>150pt \pgfarrowsupperhullpoint{-\pgfarrowlength}{.25\pgfarrowwidth} \fi \fi \fi \pgfutil@tempswafalse \ifdim\pgfarrowarc pt<90pt \pgfutil@tempswatrue \fi \ifpgfarrowharpoon \pgfutil@tempswatrue \fi \ifpgfutil@tempswa \pgf@xa.5\pgfarrowwidth\advance\pgf@xa by-\pgfarrowlinewidth% \pgf@ya\pgfarrowlength\advance\pgf@ya by-\pgfarrowlinewidth% \pgfarrowsupperhullpoint{\pgfmathresultx\pgf@ya}{\pgfmathresulty\pgf@xa} \fi % Compute back end \ifpgfarrowroundcap \pgf@y\pgfarrowlength \advance\pgf@y by-.5\pgfarrowlinewidth \pgf@x\pgfmathresultx\pgf@y% \else \ifdim\pgfarrowarc pt<90pt \pgf@y\pgfarrowlength \advance\pgf@y by-\pgfarrowlinewidth \pgf@x\pgfmathresultx\pgf@y% \else \pgf@x\pgfmathresultx\pgfarrowlength% \fi \fi \pgfarrowssetbackend{\pgf@x\ifpgfarrowroundcap\advance\pgf@x by-.5\pgfarrowlinewidth\fi} % Adjust width and length: Take line thickness into account: \advance\pgfarrowlength by-.5\pgfarrowlinewidth \advance\pgfarrowwidth by-\pgfarrowlinewidth % The following are needed in the code: \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowwidth \pgfarrowssave\pgfarrowarc }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi {% \pgftransformxscale{+\pgfarrowlength} \pgftransformyscale{+.5\pgfarrowwidth} \pgfpathmoveto{\pgfpointpolar{+\pgfarrowarc}{+1pt}} \ifpgfarrowharpoon \pgfpatharc{+\pgfarrowarc}{0pt}{+1pt} \else \pgfpatharc{+\pgfarrowarc}{+-\pgfarrowarc}{+1pt} \fi } \ifpgfarrowharpoon \pgfpathlineto{\pgfqpoint{\pgfarrowlength\advance\pgf@x by\ifpgfarrowreversed\else-\fi.5\pgflinewidth}{0pt}} \fi \pgfusepathqstroke }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \pgfarrowarc,% \ifpgfarrowharpoon h\fi% \ifpgfarrowroundcap c\fi% \ifpgfarrowroundjoin j\fi% }, }% % Tee Barb are barb arrows heads that look like a T \pgfdeclarearrow{ name = Tee Barb, defaults = { length = +1.5pt 2, width = +3pt 4, inset' = +0pt .5, line width = +0pt 1 1, }, bending mode=polar, setup code = { % Two useful numbers... \pgfutil@tempswafalse% \pgfutil@tempswbfalse% \pgfutil@tempdima\pgfarrowlength\advance\pgfutil@tempdima by-\pgfarrowinset\ifdim\pgfutil@tempdima<.5\pgfarrowlinewidth\pgfutil@tempdima.5\pgfarrowlinewidth\pgfutil@tempswatrue\fi% \pgfutil@tempdimb-\pgfarrowinset\ifdim\pgfutil@tempdimb>-.5\pgfarrowlinewidth\pgfutil@tempdimb-.5\pgfarrowlinewidth\pgfutil@tempswbtrue\fi % The following are needed in the code: \pgfarrowssavethe\pgfarrowwidth \pgfarrowssavethe\pgfutil@tempdima \pgfarrowssavethe\pgfutil@tempdimb % Infos: \pgfarrowssettipend{\pgfutil@tempdima\ifpgfarrowroundcap\ifpgfutil@tempswa\else\advance\pgf@x by.5\pgfarrowlinewidth\fi\fi} \pgfarrowssetvisualbackend{.5\pgfarrowlinewidth} \pgfarrowssetbackend{\pgfutil@tempdimb\ifpgfarrowroundcap\ifpgfutil@tempswb\else\advance\pgf@x by-.5\pgfarrowlinewidth\fi\fi} \pgfarrowssetlineend{\ifpgfarrowreversed\else-\fi.25\pgfarrowlinewidth}% % The hull: \pgfarrowsupperhullpoint{\pgfutil@tempdima\ifpgfarrowroundcap\ifpgfutil@tempswa\else\advance\pgf@x by.5\pgfarrowlinewidth\fi\fi}{.5\pgfarrowwidth}% \pgfarrowsupperhullpoint{\pgfutil@tempdimb\ifpgfarrowroundcap\ifpgfutil@tempswb\else\advance\pgf@x by-.5\pgfarrowlinewidth\fi\fi}{.5\pgfarrowwidth}% \ifpgfarrowharpoon \pgfarrowshullpoint{.5\pgfarrowlinewidth}{-.5\pgfarrowlinewidth}% \fi }, drawing code = { \pgfsetdash{}{+0pt} \pgf@yc\pgflinewidth% save... \ifdim\pgflinewidth=\pgfarrowlinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \pgf@x\pgfutil@tempdima\advance\pgf@x by-.5\pgfarrowlinewidth% \pgf@y\pgfutil@tempdimb\advance\pgf@y by.5\pgfarrowlinewidth% % Case 1: No bar atop the I: \ifdim\pgf@x=\pgf@y% \pgfpathmoveto{\pgfqpoint{0pt}{.5\pgfarrowwidth}} \pgfpathlineto{\pgfqpoint{0pt}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else-.5\pgfarrowwidth\fi}} \else % Case 2: Bar, but only in one direction: \ifdim\pgfutil@tempdima=.5\pgfarrowlinewidth% \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdimb}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \pgfpathlineto{\pgfqpoint{0pt}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \ifpgfarrowharpoon% \pgfpathlineto{\pgfqpoint{0pt}{-.5\pgf@yc}}% \else% \pgfpathlineto{\pgfqpoint{0pt}{-.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth}} \pgfpathlineto{\pgfqpoint{\pgfutil@tempdimb}{-.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth}} \fi \else% Case 3: Complete I: \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdimb}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \pgfpathlineto{\pgfqpoint{\pgfutil@tempdima}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \pgfpathmoveto{\pgfqpoint{0pt}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \ifpgfarrowharpoon% \pgfpathlineto{\pgfqpoint{0pt}{-.5\pgf@yc}}% \else% \pgfpathlineto{\pgfqpoint{0pt}{-.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth}} \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdimb}{-.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth}} \pgfpathlineto{\pgfqpoint{\pgfutil@tempdima}{-.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth}} \fi \fi \fi \pgfusepathqstroke }, parameters = { \the\pgfarrowwidth,% \the\pgfarrowlength,% \the\pgfarrowinset,% \the\pgfarrowlinewidth,% \ifpgfarrowharpoon h\fi% \ifpgfarrowroundjoin j\fi% \ifpgfarrowroundcap c\fi% }, }% % Math barbs that resemble \rightarrow in different fonts: % The original default arrow head used in TikZ. It is modeled on an % old version of the \rightarrow head of the *old* Computer Modern % fonts. \pgfdeclarearrow{ name = Classical TikZ Rightarrow, defaults = { length = +1.05pt 1.925, width' = +0pt 1.9237, line width = 0pt 0.8 1, round }, setup code = { \ifpgfarrowharpoon\pgfarrowroundjointrue\fi % inner length: \pgfutil@tempdima\pgfarrowlength \advance\pgfutil@tempdima by-\pgfarrowlinewidth \pgfutil@tempdimb\pgfarrowwidth \advance\pgfutil@tempdimb by-\pgfarrowlinewidth \ifpgfarrowroundjoin% \else% \pgfmathdivide@{\pgf@sys@tonumber\pgfutil@tempdima}{\pgf@sys@tonumber\pgfutil@tempdimb}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x40.96\pgf@x% \advance\pgf@x by1pt% \pgflinewidth^2 + (6.4 \pgftempdim@a / \pgfutil@tempdimb) \pgflinewidth^2 \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter \pgf@xc.5\pgf@xc \fi% % The following are needed in the code: \pgfarrowssavethe\pgfutil@tempdima \pgfarrowssavethe\pgfutil@tempdimb % The extend: \pgfarrowssettipend{\pgfutil@tempdima\ifpgfarrowroundjoin\advance\pgf@x by.5\pgfarrowlinewidth\else\advance\pgf@x by\pgf@xc\fi}% \pgfarrowssetvisualbackend{\pgfutil@tempdima\advance\pgf@x by.5\pgfarrowlinewidth}% \ifpgfarrowreversed% \ifpgfarrowharpoon% % A reversed arrow needs a slightly different line end: \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by.5\pgflinewidth}% \else% % A reversed arrow needs a slightly different line end: \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by-.25\pgflinewidth}% \fi% \else% \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by-.6\pgflinewidth}% \fi% \pgfarrowssetbackend{-.5\pgfarrowlinewidth}% % The hull: % Tip: \pgfarrowshullpoint{\pgfutil@tempdima\ifpgfarrowroundjoin\advance\pgf@x by.5\pgfarrowlinewidth\else\advance\pgf@x by\pgf@xc\fi}{.5\pgfarrowlinewidth}% \pgfarrowshullpoint{\pgfutil@tempdima\ifpgfarrowroundjoin\advance\pgf@x by.5\pgfarrowlinewidth\else\advance\pgf@x by\pgf@xc\fi}{-.5\pgfarrowlinewidth}% % Upper end: \pgfarrowsupperhullpoint{.5\pgfarrowlinewidth}{.5\pgfutil@tempdimb\advance\pgf@y by.5\pgfarrowlinewidth}% \pgfarrowsupperhullpoint{-.5\pgfarrowlinewidth}{.5\pgfutil@tempdimb\advance\pgf@y by.5\pgfarrowlinewidth}% % Lower end: \ifpgfarrowharpoon \pgfarrowshullpoint{\pgfutil@tempdima\advance\pgf@x by-\pgflinewidth}{-.5\pgflinewidth}% \pgfarrowshullpoint{-.5\pgfarrowlinewidth}{.5\pgfutil@tempdimb\advance\pgf@y by-.5\pgflinewidth}% \fi }, drawing code = { \pgfsetdash{}{+0pt} \edef\pgf@orig@linewidth{\the\pgflinewidth} \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \ifpgfarrowharpoon\pgfarrowroundjointrue\fi \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \pgfpathmoveto {\pgfqpoint{0pt}{.5\pgfutil@tempdimb}} \ifpgfarrowharpoon \pgf@arrows@old@tikz@harpoon \else \pgfpathcurveto {\pgfqpoint{0.066666\pgfutil@tempdima}{0.3125\pgfutil@tempdimb}} {\pgfqpoint{.8\pgfutil@tempdima}{0.03125\pgfutil@tempdimb}} {\pgfqpoint{\pgfutil@tempdima}{0pt}} \pgfpathcurveto {\pgfqpoint{.8\pgfutil@tempdima}{-.03125\pgfutil@tempdimb}} {\pgfqpoint{0.066666\pgfutil@tempdima}{-.3125\pgfutil@tempdimb}} {\pgfqpoint{0pt}{-.5\pgfutil@tempdimb}} \pgfsetlinewidth{+\pgfarrowlinewidth} \pgfusepathqstroke \fi }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \ifpgfarrowharpoon h\fi% \ifpgfarrowroundjoin j\fi% \ifpgfarrowroundcap c\fi% }, }% \def\pgf@arrows@old@tikz@harpoon{ \ifpgfarrowreversed \pgf@arrows@old@tikz@harpoon@reversed \else \pgfpathcurveto {\pgfqpoint{0.066666\pgfutil@tempdima}{0.3125\pgfutil@tempdimb}} {\pgfqpoint{.8\pgfutil@tempdima}{0.03125\pgfutil@tempdimb}} {\pgfqpoint{\pgfutil@tempdima}{0pt}} \pgfpathcurveto {\pgfqpoint{0.95\pgfutil@tempdima}{-0.125\pgflinewidth}} {\pgfqpoint{0.933333\pgfutil@tempdima}{-0.125\pgflinewidth}} {\pgfqpoint{0.933333\pgfutil@tempdima}{-0.125\pgflinewidth}} \pgfpathlineto {\pgfqpoint{0.8\pgfutil@tempdima\advance\pgf@x by-.5\pgflinewidth}{-0.125\pgflinewidth}} \pgfusepathqstroke \fi }% \def\pgf@arrows@old@tikz@harpoon@reversed{ \pgfpathcurveto {\pgfqpoint{0.066666\pgfutil@tempdima}{0.3125\pgfutil@tempdimb}} {\pgfqpoint{.8\pgfutil@tempdima}{0.03125\pgfutil@tempdimb}} {\pgfqpoint{\pgfutil@tempdima}{0.125\pgflinewidth}} \pgfpathmoveto {\pgfqpoint{0pt}{.5\pgfutil@tempdimb}} \pgfpathcurveto {\pgfqpoint{0.066666\pgfutil@tempdima}{0.3125\pgfutil@tempdimb}} {\pgfqpoint{.8\pgfutil@tempdima}{0.03125\pgfutil@tempdimb}} {\pgfqpoint{\pgfutil@tempdima}{-0.125\pgflinewidth}} \pgfusepathqstroke \pgfsetlinewidth{+\pgf@orig@linewidth} \pgfsetroundcap \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima\advance\pgf@x by0.6\pgflinewidth}{0pt}} \pgfpathlineto{\pgfqpoint{\pgfutil@tempdima}{0pt}} \pgfusepathqstroke }% % An approximation to the new (past 1992) Computer Modern math arrow % heads. This would be a better version of "to", so consider saying % to/.tips=Computer Modern Rightarrow \pgfdeclarearrow{ name = Computer Modern Rightarrow, defaults = { length = +1.6pt 2.2, % 0pt 5.2 width' = +0pt 2.096774, line width = 0pt 1 1, round }, setup code = { % inner length: \pgfutil@tempdima\pgfarrowlength \advance\pgfutil@tempdima by-\pgfarrowlinewidth \pgfutil@tempdimb\pgfarrowwidth \advance\pgfutil@tempdimb by-\pgfarrowlinewidth % The following are needed in the code: \pgfarrowssavethe\pgfutil@tempdima \pgfarrowssavethe\pgfutil@tempdimb % Front miter: \ifpgfarrowroundjoin% \else% \pgfmathdivide@{\pgf@sys@tonumber\pgfutil@tempdima}{\pgf@sys@tonumber\pgfutil@tempdimb}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x49.44662\pgf@x% \advance\pgf@x by1pt% \pgfarrowlinewidth^2 + (0.41019/0.0583333 \pgftempdim@a / \pgfutil@tempdimb) \pgfarrowlinewidth^2 \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter \pgf@xc.5\pgf@xc \pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter \pgf@xa3.51591\pgf@xa% xa is extra harpoon miter \fi% % The extend: \pgfarrowssettipend{\ifpgfarrowroundjoin.5\pgfarrowlinewidth\else\pgf@xc\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}% \pgfarrowssetvisualbackend{.5\pgfarrowlinewidth}% \ifpgfarrowreversed% \ifpgfarrowharpoon% \pgfarrowssetlineend{.5\pgfarrowlinewidth}% \else% \pgfarrowssetlineend{-.5\pgfarrowlinewidth}% \fi% \else% \pgfarrowssetlineend{-.5\pgfarrowlinewidth}% \fi% \pgfarrowssetbackend{-\pgfutil@tempdima\advance\pgf@x by-.5\pgfarrowlinewidth}% % The hull: % Tip: \pgfarrowshullpoint{\ifpgfarrowroundjoin.5\pgfarrowlinewidth\else\pgf@xc\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{.5\pgfarrowlinewidth}% \pgfarrowshullpoint{\ifpgfarrowroundjoin.5\pgfarrowlinewidth\else\pgf@xc\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{-.5\pgfarrowlinewidth}% % Upper end: \pgfarrowsupperhullpoint{-\pgfutil@tempdima\advance\pgf@x by.5\pgfarrowlinewidth}{.5\pgfutil@tempdimb\advance\pgf@y by.5\pgfarrowlinewidth}% \pgfarrowsupperhullpoint{-\pgfutil@tempdima\advance\pgf@x by-.5\pgfarrowlinewidth}{.5\pgfutil@tempdimb\advance\pgf@y by.5\pgfarrowlinewidth}% % Lower end: \ifpgfarrowharpoon \pgfarrowshullpoint{-\pgfarrowlinewidth}{-.5\pgfarrowlinewidth}% \pgfarrowshullpoint{-\pgfutil@tempdima\advance\pgf@x by-.5\pgfarrowlinewidth}{.5\pgfutil@tempdimb\advance\pgf@y by-.5\pgfarrowlinewidth}% \fi }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \pgfpathmoveto {\pgfqpoint{-\pgfutil@tempdima}{.5\pgfutil@tempdimb}} \pgfpathcurveto {\pgfqpoint{-0.81731\pgfutil@tempdima}{.2\pgfutil@tempdimb}} {\pgfqpoint{-0.41019\pgfutil@tempdima}{0.05833333\pgfutil@tempdimb}} {\pgfpointorigin} \ifpgfarrowharpoon \pgfpathlineto {\pgfqpoint{\ifpgfarrowreversed.5\else-\fi\pgfarrowlinewidth}{0pt}} \else \pgfpathcurveto {\pgfqpoint{-0.41019\pgfutil@tempdima}{-0.05833333\pgfutil@tempdimb}} {\pgfqpoint{-0.81731\pgfutil@tempdima}{-.2\pgfutil@tempdimb}} {\pgfqpoint{-\pgfutil@tempdima}{-.5\pgfutil@tempdimb}} \fi \pgfusepathqstroke }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \ifpgfarrowharpoon h\fi \ifpgfarrowharpoon r\fi \ifpgfarrowroundjoin j\fi% \ifpgfarrowroundcap c\fi% }, }% % The arrow tip of an \implies arrow, to be used with an inner % line. Cannot be configured otherwise. \pgfdeclarearrow{ name = Implies, setup code = { \pgf@xa\pgfinnerlinewidth \pgfutil@tempdima.25\pgflinewidth \advance\pgfutil@tempdima by.25\pgf@xa% \pgfutil@tempdimb.5\pgflinewidth \advance\pgfutil@tempdimb by-.5\pgf@xa% \pgfarrowssettipend{2.06\pgfutil@tempdima\advance\pgf@x by.5\pgfutil@tempdimb} \pgfarrowssetbackend{-1.36\pgfutil@tempdima\advance\pgf@x by.5\pgfutil@tempdimb} \pgfarrowsupperhullpoint{-1.4\pgfutil@tempdima}{2.8\pgfutil@tempdima} \pgfarrowsupperhullpoint{2\pgfutil@tempdima}{.5\pgfutil@tempdimb} \pgfarrowssavethe\pgfutil@tempdima \pgfarrowssavethe\pgfutil@tempdimb }, drawing code = { \pgftransformxshift{.06\pgfutil@tempdima} \pgfsetlinewidth{\pgfutil@tempdimb} \pgfsetdash{}{+0pt} \pgfsetroundcap \pgfsetroundjoin \pgfpathmoveto{\pgfpoint{-1.4\pgfutil@tempdima}{2.65\pgfutil@tempdima}} \pgfpathcurveto {\pgfpoint{-0.75\pgfutil@tempdima}{1.25\pgfutil@tempdima}} {\pgfpoint{1\pgfutil@tempdima}{0.05\pgfutil@tempdima}} {\pgfpoint{2\pgfutil@tempdima}{0pt}} \pgfpathcurveto {\pgfpoint{1\pgfutil@tempdima}{-0.05\pgfutil@tempdima}} {\pgfpoint{-.75\pgfutil@tempdima}{-1.25\pgfutil@tempdima}} {\pgfpoint{-1.4\pgfutil@tempdima}{-2.65\pgfutil@tempdima}} \pgfusepathqstroke }, parameters = {\the\pgfarrowlength} }% % % % Geometric arrow tips % % % Generic "latex-like" arrow tip. This is the basic arrow tip used in % latex's picture environment. You can configure its length and width. \pgfdeclarearrow{ name = Latex, defaults = { length = +3pt 4.5 .8,% +2.8pt 3 0.8, width' = +0pt .75, line width = +0pt 1 1, }, setup code = { % Cap the line width at 1/4th distance from inset to tip \pgf@x.2\pgfarrowlength \ifdim\pgf@x<\pgfarrowlinewidth \pgfarrowlinewidth\pgf@x \fi \pgfarrowssavethe\pgfarrowlinewidth% % Compute front miter length: \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowlength}{\pgf@sys@tonumber\pgfarrowwidth}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x9\pgf@x% \advance\pgf@x by1pt% \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@xc\pgfmathresult\pgfarrowlinewidth% \pgf@xa\pgf@temp@quot\pgfarrowlinewidth % Inner length (pgfutil@tempdima) is now arrowlength - front miter % - 0.5 linewidth (back thickness) \pgfutil@tempdima\pgfarrowlength% \advance\pgfutil@tempdima by-.5\pgf@xc% \advance\pgfutil@tempdima by-.5\pgfarrowlinewidth% % harpoon miter correction \pgfarrowssetbackend{-.5\pgfarrowlinewidth} \ifpgfarrowreversed \ifdim\pgfinnerlinewidth>0pt \pgfarrowssetlineend{0pt} \else \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by-.5\pgflinewidth} \fi \else \pgfarrowssetlineend{0pt} \fi \ifpgfarrowroundjoin \pgfarrowssettipend{\pgfutil@tempdima\advance\pgf@x by.5\pgfarrowlinewidth} \else \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth\ifpgfarrowharpoon\advance\pgf@x by1.5\pgf@xa\fi} \fi % The following are needed in the code: \pgfarrowssavethe\pgfutil@tempdima % Now, compute back tip miter limit: \pgf@process{\pgfpointnormalised{\pgfqpoint{.3\pgfarrowlength}{.2333333\pgfarrowwidth}}}% \advance\pgf@y by1pt% \pgf@yc\pgf@y\pgf@xc\pgf@x% \pgfmathdivide@{\pgf@sys@tonumber\pgf@yc}{\pgf@sys@tonumber\pgf@xc}% \pgfutil@tempdimb\pgfmathresult\pgfarrowlinewidth% \pgfutil@tempdimb-.5\pgfutil@tempdimb% \advance\pgfutil@tempdimb by.5\pgfarrowwidth% \pgfarrowssavethe\pgfutil@tempdimb% % The hull: \pgfarrowshullpoint{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf@x by1.5\pgf@xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}% \pgfarrowshullpoint{-.5\pgfarrowlinewidth}{.5\pgfarrowwidth\ifpgfarrowharpoon\advance\pgf@y by-.5\pgfarrowlinewidth\fi}% \pgfarrowshullpoint{-.5\pgfarrowlinewidth}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else-.5\pgfarrowwidth\fi}% }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \pgfpathmoveto {\pgfqpoint{\pgfutil@tempdima}{0pt}} \pgfpathcurveto {\pgfqpoint{.877192\pgfutil@tempdima}{.077922\pgfutil@tempdimb}} {\pgfqpoint{.337381\pgfutil@tempdima}{.519480\pgfutil@tempdimb}} {\pgfqpoint{0pt}{\pgfutil@tempdimb}} \ifpgfarrowharpoon \pgfpathlineto {\pgfpointorigin} \else \pgfpathlineto {\pgfqpoint{0pt}{-\pgfutil@tempdimb}} \pgfpathcurveto {\pgfqpoint{.337381\pgfutil@tempdima}{-.519480\pgfutil@tempdimb}} {\pgfqpoint{.877192\pgfutil@tempdima}{-.077922\pgfutil@tempdimb}} {\pgfqpoint{\pgfutil@tempdima}{0pt}} \fi \pgfpathclose \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \ifpgfarrowharpoon h\fi% \ifpgfarrowopen o\fi% \ifpgfarrowroundjoin j\fi% }, }% % A basic stealth-fighter-like pointed arrow \pgfdeclarearrow{ name = Stealth, defaults = { length = +3pt 4.5 .8, width' = +0pt .75, inset' = +0pt 0.325, line width = +0pt 1 1, }, setup code = { % Cap the line width at 1/4th distance from inset to tip \pgf@x\pgfarrowlength \advance\pgf@x by-\pgfarrowinset \pgf@x.25\pgf@x \ifdim\pgf@x<\pgfarrowlinewidth \pgfarrowlinewidth\pgf@x \fi % Compute front miter length: \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowlength}{\pgf@sys@tonumber\pgfarrowwidth}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x4\pgf@x% \advance\pgf@x by1pt% \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter \pgf@xc.5\pgf@xc \pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter % Compute back miter length: \pgf@ya.5\pgfarrowwidth% \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowlength}{\pgfmath@tonumber\pgf@ya}% \pgf@yb\pgfmathresult pt% \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowinset}{\pgfmath@tonumber\pgf@ya}% \pgf@ya\pgfmathresult pt% \advance\pgf@yb by-\pgf@ya% \pgf@yb.5\pgf@yb% half angle in yb \pgfmathtan@{\pgf@sys@tonumber\pgf@yb}% \pgfmathreciprocal@{\pgfmathresult}% \pgf@yc\pgfmathresult\pgfarrowlinewidth% \pgf@yc.5\pgf@yc% \advance\pgf@ya by\pgf@yb% \pgfmathsincos@{\pgf@sys@tonumber\pgf@ya}% \pgf@ya\pgfmathresulty\pgf@yc% ya is the back miter \pgf@yb\pgfmathresultx\pgf@yc% yb is the top miter \ifdim\pgfarrowinset=0pt% \pgf@ya.5\pgfarrowlinewidth% easy: back miter is half linewidth \fi % Compute inset miter length: \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowinset}{\pgf@sys@tonumber\pgfarrowwidth}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x4\pgf@x% \advance\pgf@x by1pt% \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@yc\pgfmathresult\pgfarrowlinewidth% yc is inset miter \pgf@yc.5\pgf@yc% % Inner length (pgfutil@tempdima) is now arrowlength - front miter - back miter \pgfutil@tempdima\pgfarrowlength% \advance\pgfutil@tempdima by-\pgf@xc% \advance\pgfutil@tempdima by-\pgf@ya% \pgfutil@tempdimb.5\pgfarrowwidth% \advance\pgfutil@tempdimb by-\pgf@yb% % harpoon miter correction \ifpgfarrowroundjoin \pgfarrowssetbackend{\pgf@ya\advance\pgf@x by-.5\pgfarrowlinewidth} \else \pgfarrowssetbackend{0pt} \fi \ifpgfarrowharpoon \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by.5\pgfarrowlinewidth} \else \pgfarrowssetlineend{\pgfarrowinset\advance\pgf@x by\pgf@yc\advance\pgf@x by-.25\pgfarrowlinewidth} \ifpgfarrowreversed \ifdim\pgfinnerlinewidth>0pt \pgfarrowssetlineend{\pgfarrowinset} \else \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by-.25\pgfarrowlinewidth} \fi \fi \fi \ifpgfarrowroundjoin \pgfarrowssettipend{\pgfutil@tempdima\advance\pgf@x by\pgf@ya\advance\pgf@x by.5\pgfarrowlinewidth} \else \pgfarrowssettipend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi} \fi % The hull: \pgfarrowshullpoint{\pgfarrowlength\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}% \pgfarrowsupperhullpoint{0pt}{.5\pgfarrowwidth}% \pgfarrowshullpoint{\pgfarrowinset}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else 0pt\fi}% % Adjust inset \pgfarrowssetvisualbackend{\pgfarrowinset} \advance\pgfarrowinset by\pgf@yc% % The following are needed in the code: \pgfarrowssavethe\pgfutil@tempdima \pgfarrowssavethe\pgfutil@tempdimb \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgf@ya \pgfarrowssavethe\pgfarrowinset }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima\advance\pgf@x by\pgf@ya}{0pt}} \pgfpathlineto{\pgfqpoint{\pgf@ya}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfqpoint{\pgfarrowinset}{0pt}} \ifpgfarrowharpoon \else \pgfpathlineto{\pgfqpoint{\pgf@ya}{-\pgfutil@tempdimb}} \fi \pgfpathclose \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \the\pgfarrowinset,% \ifpgfarrowharpoon h\fi% \ifpgfarrowopen o\fi% \ifpgfarrowroundjoin j\fi% }, }% % A Kite is like a Stealth, only the inset counts in the other direction \pgfdeclarearrow{ name = Kite, defaults = { length = +3.6pt +5.4, width' = +0pt +0.5, inset' = +0pt 0.25, line width = +0pt 1 1, }, setup code = { % Cap the line width at 1/4th of the length \pgf@x.4\pgfarrowlength \ifdim\pgf@x<\pgfarrowlinewidth \pgfarrowlinewidth\pgf@x \fi \pgf@x.4\pgfarrowwidth \ifdim\pgf@x<\pgfarrowlinewidth \pgfarrowlinewidth\pgf@x \fi % Compute front miter length: \pgf@xa\pgfarrowlength% \advance\pgf@xa by-\pgfarrowinset% \pgfmathdivide@{\pgf@sys@tonumber\pgf@xa}{\pgf@sys@tonumber\pgfarrowwidth}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x4\pgf@x% \advance\pgf@x by1pt% \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@xc\pgfmathresult\pgfarrowlinewidth% xc is front miter \pgf@xc.5\pgf@xc \pgf@xa\pgf@temp@quot\pgfarrowlinewidth% xa is extra harpoon miter % Compute back miter length: \pgfmathdivide@{\pgf@sys@tonumber\pgfarrowinset}{\pgf@sys@tonumber\pgfarrowwidth}% \let\pgf@temp@quot\pgfmathresult% \pgf@x\pgfmathresult pt% \pgf@x\pgfmathresult\pgf@x% \pgf@x4\pgf@x% \advance\pgf@x by1pt% \pgfmathsqrt@{\pgf@sys@tonumber\pgf@x}% \pgf@yc\pgfmathresult\pgfarrowlinewidth% yc is back miter \pgf@yc.5\pgf@yc \pgf@ya\pgf@temp@quot\pgfarrowlinewidth% ya is extra harpoon miter % Compute top miter length: {% \pgfutil@tempdimb.5\pgfarrowwidth% \pgfutil@tempdima\pgfarrowlength\advance\pgfutil@tempdima by-\pgfarrowinset% \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfutil@tempdima}{\pgfmath@tonumber\pgfutil@tempdimb}% \pgf@yb\pgfmathresult pt% \csname pgfmathatan2@\endcsname{\pgfmath@tonumber\pgfarrowinset}{\pgfmath@tonumber\pgfutil@tempdimb}% \pgf@ya\pgfmathresult pt% \advance\pgf@yb by\pgf@ya% \pgf@yb.5\pgf@yb% half angle in yb \ifdim\pgf@yb=45pt% \def\pgfmathresult{1.414213}% \else% \pgfmathsin@{\pgf@sys@tonumber\pgf@yb}% \pgfmathreciprocal@{\pgfmathresult}% \fi% \pgf@yc\pgfmathresult\pgfarrowlinewidth% \pgf@yc.5\pgf@yc% \pgf@ya-\pgf@ya% \advance\pgf@ya by-90pt% \advance\pgf@ya by\pgf@yb% \pgfmathsincos@{\pgf@sys@tonumber\pgf@ya}% \pgf@xb\pgfmathresultx\pgf@yc% ya is the back miter \pgf@yb\pgfmathresulty\pgf@yc% yb is the top miter \expandafter\expandafter\expandafter% }\expandafter\expandafter\expandafter\pgf@xb\expandafter\the\expandafter\pgf@xb\expandafter\pgf@yb\the\pgf@yb% % Inner length (pgfutil@tempdima) is now arrowlength - front miter - back miter \pgfutil@tempdima\pgfarrowlength% \advance\pgfutil@tempdima by-\pgf@xc% \pgfutil@tempdimb.5\pgfarrowwidth% \advance\pgfutil@tempdimb by\pgf@yb% % Set back end \ifpgfarrowroundjoin \pgfarrowssetbackend{\pgf@ya\advance\pgf@x by-.5\pgfarrowlinewidth} \else \pgfarrowssetbackend{0pt} \fi % harpoon miter correction \ifpgfarrowreversed \pgfarrowssetlineend{\pgfutil@tempdima\advance\pgf@x by-\pgflinewidth\advance\pgf@x by\pgfarrowlinewidth} \else \pgfarrowssetlineend{\pgf@yc\advance\pgf@x by\pgflinewidth\advance\pgf@x by-\pgfarrowlinewidth} \fi \ifpgfarrowroundjoin \pgfarrowssettipend{\pgfutil@tempdima\advance\pgf@x by.5\pgfarrowlinewidth} \else \pgfarrowssettipend{\pgfarrowlength\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi} \fi % The hull: \pgfarrowshullpoint{\pgfarrowlength\ifpgfarrowroundjoin\else\ifpgfarrowharpoon\advance\pgf@x by\pgf@xa\fi\fi}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}% \pgfarrowsupperhullpoint{\pgfarrowinset}{.5\pgfarrowwidth}% \pgfarrowshullpoint{0pt}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else0pt\fi}% % Adjust the inset: \advance\pgfarrowinset by\pgf@xb% % The following are needed in the code: \pgfarrowssavethe\pgfutil@tempdima \pgfarrowssavethe\pgfutil@tempdimb \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgf@yc \pgfarrowssavethe\pgfarrowinset }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{\pgfarrowlinewidth}\fi \pgfpathmoveto{\pgfqpoint{\pgfutil@tempdima}{0pt}} \pgfpathlineto{\pgfqpoint{\pgfarrowinset}{\pgfutil@tempdimb}} \pgfpathlineto{\pgfqpoint{\pgf@yc}{0pt}} \ifpgfarrowharpoon \else \pgfpathlineto{\pgfqpoint{\pgfarrowinset}{-\pgfutil@tempdimb}} \fi \pgfpathclose \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \the\pgfarrowinset,% \ifpgfarrowharpoon h\fi% \ifpgfarrowopen o\fi% \ifpgfarrowroundjoin j\fi% }, }% % A simple rectangle shape \pgfdeclarearrow{ name = Square, defaults = { length = +2.12132pt +2.828427, width' = +0pt +1, line width = +0pt +1 +1, }, setup code = { % Cap the line width at 1/2th of the length \pgf@x.5\pgfarrowlength \ifdim\pgf@x<\pgfarrowlinewidth \pgfarrowlinewidth\pgf@x \fi \ifpgfarrowreversed \pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth} \else \pgfarrowssetlineend{.5\pgfarrowlinewidth} \fi \pgfarrowssettipend{\pgfarrowlength} % The hull: \pgfarrowshullpoint{\pgfarrowlength}{.5\pgfarrowwidth} \pgfarrowshullpoint{0pt}{.5\pgfarrowwidth} \pgfarrowshullpoint{\pgfarrowlength}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else-.5\pgfarrowwidth\fi} \pgfarrowshullpoint{0pt}{\ifpgfarrowharpoon-.5\pgfarrowlinewidth\else-.5\pgfarrowwidth\fi} % The following are needed in the code: \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowwidth }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \pgfpathmoveto{\pgfqpoint{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \pgfpathlineto{\pgfqpoint{.5\pgfarrowlinewidth}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \pgfpathlineto{\pgfqpoint{.5\pgfarrowlinewidth}{\ifpgfarrowharpoon0pt\else-.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth\fi}} \pgfpathlineto{\pgfqpoint{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth}{\ifpgfarrowharpoon0pt\else-.5\pgfarrowwidth\advance\pgf@y by.5\pgfarrowlinewidth\fi}} \pgfpathclose \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \ifpgfarrowharpoon h\fi% \ifpgfarrowopen o\fi% \ifpgfarrowroundjoin j\fi% }, }% % A simple rectangle shape \pgfdeclarearrow{ name = Circle, defaults = { length = +2.39365pt +3.191538, width' = +0pt 1, line width = +0pt 1 1, }, setup code = { % Cap the line width at 1/2th of the length \pgf@x.5\pgfarrowlength \ifdim\pgf@x<\pgfarrowlinewidth \pgfarrowlinewidth\pgf@x \fi \ifpgfarrowreversed \pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth} \else \pgfarrowssetlineend{.5\pgfarrowlinewidth} \fi \pgfarrowssettipend{\pgfarrowlength} % The hull: \pgfarrowsupperhullpoint{\pgfarrowlength}{.25\pgfarrowwidth} \pgfarrowsupperhullpoint{.75\pgfarrowlength}{.5\pgfarrowwidth} \pgfarrowsupperhullpoint{.25\pgfarrowlength}{.5\pgfarrowwidth} \pgfarrowsupperhullpoint{0pt}{.25\pgfarrowwidth} \ifpgfarrowharpoon% \pgfarrowshullpoint{0pt}{-.5\pgfarrowlinewidth} \pgfarrowshullpoint{\pgfarrowlength}{-.5\pgfarrowlinewidth} \fi% % The following are needed in the code: \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowwidth }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundjoin\pgfsetroundjoin\else\pgfsetmiterjoin\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi \ifpgfarrowharpoon \pgfpathmoveto{\pgfqpoint{\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth}{0pt}} {% \pgf@xa.5\pgfarrowlength \advance\pgf@xa by-.5\pgfarrowlinewidth \pgftransformxscale{+\the\pgf@xa} \pgf@xa.5\pgfarrowwidth \advance\pgf@xa by-.5\pgfarrowlinewidth \pgftransformyscale{+\the\pgf@xa} \pgfpatharc{0}{180}{1pt} } \pgfpathclose \else% \pgfpathellipse{\pgfqpoint{.5\pgfarrowlength}{0pt}}{\pgfqpoint{.5\pgfarrowlength\advance\pgf@x by-.5\pgfarrowlinewidth}{0pt}}{\pgfqpoint{0pt}{.5\pgfarrowwidth\advance\pgf@y by-.5\pgfarrowlinewidth}} \fi \ifpgfarrowopen\pgfusepathqstroke\else\ifdim\pgfarrowlinewidth>0pt\pgfusepathqfillstroke\else\pgfusepathqfill\fi\fi }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \ifpgfarrowharpoon h\fi% \ifpgfarrowopen o\fi% \ifpgfarrowroundjoin j\fi% }, }% % Round cap \pgfdeclarearrow{ name = Round Cap, defaults = { length = +0pt .5 }, setup code = { \ifpgfarrowreversed \pgfarrowssettipend{\pgfarrowlength} \pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by.5\pgflinewidth} \else \pgfarrowssettipend{\pgfarrowlength} \pgfarrowssetlineend{-.5\pgflinewidth} \fi \pgfarrowssavethe\pgfarrowlength \pgfarrowsupperhullpoint{0pt}{.5\pgflinewidth} \pgfarrowsupperhullpoint{\pgfarrowlength}{.5\pgflinewidth} }, drawing code = { \ifpgfarrowreversed \pgftransformxscale{-1} \pgftransformxshift{-\pgfarrowlength} \fi \pgfutil@tempdima.5\pgflinewidth \pgfpathmoveto {\pgfqpoint{-0.75\pgflinewidth}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{0pt}{\pgfutil@tempdima}} \ifpgfarrowreversed \pgfpathlineto {\pgfqpoint{\pgfarrowlength}{\pgfutil@tempdima}} \begingroup \pgftransformxshift{\pgfarrowlength} \pgftransformxscale{-1} \fi \pgfpathcurveto {\pgfqpoint{0.55228475\pgfarrowlength}{\pgfutil@tempdima}} {\pgfqpoint{\pgfarrowlength}{0.55228475\pgfutil@tempdima}} {\pgfqpoint{\pgfarrowlength}{0pt}} \pgfpathcurveto {\pgfqpoint{\pgfarrowlength}{-0.55228475\pgfutil@tempdima}} {\pgfqpoint{0.55228475\pgfarrowlength}{-\pgfutil@tempdima}} {\pgfqpoint{0pt}{-\pgfutil@tempdima}} \ifpgfarrowreversed \endgroup \fi \pgfpathlineto {\pgfqpoint{-.75\pgflinewidth}{-\pgfutil@tempdima}} \pgfpathclose \pgfusepathqfill }, parameters = {\the\pgfarrowlength} }% \pgfdeclarearrow{ name = Butt Cap, defaults = { length = +0pt .5 }, setup code = { \pgfarrowssettipend{\pgfarrowlength} \pgfarrowssetlineend{-.5\pgflinewidth} \pgfarrowssavethe\pgfarrowlength \pgfarrowsupperhullpoint{0pt}{.5\pgflinewidth} \pgfarrowsupperhullpoint{\pgfarrowlength}{.5\pgflinewidth} }, drawing code = { \pgfutil@tempdima.5\pgflinewidth \pgfpathmoveto {\pgfqpoint{-0.75\pgflinewidth}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{0pt}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{\pgfarrowlength}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{\pgfarrowlength}{-\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{-.75\pgflinewidth}{-\pgfutil@tempdima}} \pgfpathclose \pgfusepathqfill }, parameters = {\the\pgfarrowlength} }% \pgfkeys{ /pgf/arrow keys/.cd, cap angle/.code={% \pgfmathsetlength\pgf@x{#1}% \pgf@x.5\pgf@x \pgfmathtan@{\pgf@sys@tonumber\pgf@x}% \pgfmathreciprocal@{\pgfmathresult}% \pgf@x\pgfmathresult pt% \pgf@x.5\pgf@x% \edef\pgf@marshal{\noexpand\pgfarrowsaddtooptions{\noexpand\pgfarrowslinewidthdependent{+0pt}{\pgf@sys@tonumber\pgf@x}{0}\pgfarrowlength\pgf@x}} \pgf@marshal } }% \pgfdeclarearrow{ name = Triangle Cap, defaults = { length = +0pt .5 }, setup code = { \ifpgfarrowreversed \pgfarrowssettipend{\pgfarrowlength} \pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by.5\pgflinewidth} \else \pgfarrowssettipend{\pgfarrowlength} \pgfarrowssetlineend{-.5\pgflinewidth} \fi \pgfarrowssavethe\pgfarrowlength \pgfarrowsupperhullpoint{0pt}{.5\pgflinewidth} \pgfarrowshullpoint{\pgfarrowlength}{0pt} }, drawing code = { \ifpgfarrowreversed \pgftransformxscale{-1} \pgftransformxshift{-\pgfarrowlength} \fi \pgfutil@tempdima.5\pgflinewidth \pgfpathmoveto {\pgfqpoint{-0.75\pgflinewidth}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{0pt}{\pgfutil@tempdima}} \ifpgfarrowreversed \pgfpathlineto {\pgfqpoint{\pgfarrowlength}{\pgfutil@tempdima}} \begingroup \pgftransformxshift{\pgfarrowlength} \pgftransformxscale{-1} \fi \pgfpathlineto {\pgfqpoint{\pgfarrowlength}{0pt}} \ifpgfarrowreversed \endgroup \pgfpathlineto {\pgfqpoint{\pgfarrowlength}{-\pgfutil@tempdima}} \fi \pgfpathlineto {\pgfqpoint{0pt}{-\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{-.75\pgflinewidth}{-\pgfutil@tempdima}} \pgfpathclose \pgfusepathqfill }, parameters = {\the\pgfarrowlength} }% \pgfdeclarearrow{ name = Fast Triangle, defaults = { length = +0pt .5, inset = +0pt .5, }, setup code = { \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by\pgfarrowinset} \ifpgfarrowreversed\pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by\pgfarrowinset}\fi \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowinset \pgfarrowsupperhullpoint{0pt}{.5\pgflinewidth} \pgfarrowsupperhullpoint{\pgfarrowinset}{.5\pgflinewidth} \pgfarrowshullpoint{\pgfarrowlength\advance\pgf@x by\pgfarrowinset}{0pt} }, drawing code = { \pgfutil@tempdima.5\pgflinewidth \pgfpathmoveto {\pgfqpoint{0pt}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{\pgfarrowinset}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{\pgfarrowinset\advance\pgf@x by\pgfarrowlength}{0pt}} \pgfpathlineto {\pgfqpoint{\pgfarrowinset}{-\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{0pt}{-\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{\pgfarrowlength}{0pt}} \pgfpathclose \pgfusepathqfill }, parameters = {\the\pgfarrowlength,\the\pgfarrowinset} }% \pgfdeclarearrow{ name = Fast Round, defaults = { length = +0pt .5, inset = +0pt .5, }, setup code = { \pgfarrowssettipend{\pgfarrowlength\advance\pgf@x by\pgfarrowinset} \ifpgfarrowreversed\pgfarrowssetlineend{\pgfarrowlength\advance\pgf@x by\pgfarrowinset}\fi \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowinset \pgfarrowsupperhullpoint{0pt}{.5\pgflinewidth} \pgfarrowsupperhullpoint{\pgfarrowlength\advance\pgf@x by\pgfarrowinset}{.5\pgflinewidth} }, drawing code = { \pgfutil@tempdima.5\pgflinewidth \pgfpathmoveto {\pgfqpoint{0pt}{\pgfutil@tempdima}} \pgfpathlineto {\pgfqpoint{\pgfarrowinset}{\pgfutil@tempdima}} { \pgftransformxshift{\pgfarrowinset} \pgfpathcurveto{\pgfqpoint{0.55228475\pgfarrowlength}{\pgfutil@tempdima}} {\pgfqpoint{\pgfarrowlength}{0.55228475\pgfutil@tempdima}} {\pgfqpoint{\pgfarrowlength}{0pt}} \pgfpathcurveto{\pgfqpoint{\pgfarrowlength}{-0.55228475\pgfutil@tempdima}} {\pgfqpoint{0.55228475\pgfarrowlength}{-\pgfutil@tempdima}} {\pgfqpoint{0pt}{-\pgfutil@tempdima}} } \pgfpathlineto {\pgfqpoint{0pt}{-\pgfutil@tempdima}} \pgfpathcurveto {\pgfqpoint{0.55228475\pgfarrowlength}{-\pgfutil@tempdima}} {\pgfqpoint{\pgfarrowlength}{-0.55228475\pgfutil@tempdima}} {\pgfqpoint{\pgfarrowlength}{0pt}} \pgfpathcurveto {\pgfqpoint{\pgfarrowlength}{0.55228475\pgfutil@tempdima}} {\pgfqpoint{0.55228475\pgfarrowlength}{\pgfutil@tempdima}} {\pgfqpoint{0pt}{\pgfutil@tempdima}} \pgfpathclose \pgfusepathqfill }, parameters = {\the\pgfarrowlength,\the\pgfarrowinset} }% % % % Other arrow tips. % % \pgfkeys{ /pgf/arrow keys/.cd, n/.code={% \pgfmathparse{#1}% \expandafter\pgf@lib@meta@strip@dot\pgfmathresult.\relax% } }% \def\pgf@lib@meta@strip@dot#1.#2\relax{% \pgfarrowsaddtooptions{\def\pgfarrown{#1}}% }% \def\pgfarrown{4}% \pgfdeclarearrow{ name = Rays, defaults = { length = +3pt 4, width' = +0pt 1, line width = +0pt 1 1, }, setup code = { \pgfmathdivide@{360}{\pgfarrown}% \let\pgfarrow@inc\pgfmathresult% % Compute tips: \pgf@xa\pgfarrow@inc pt% \ifodd\pgfarrown\pgf@ya.25\pgf@xa\else\pgf@ya.5\pgf@xa\fi% \pgfmathsincos@{\pgf@sys@tonumber\pgf@ya}% \pgf@x.5\pgfarrowlength% \pgf@xa\pgfmathresultx\pgf@x% \ifpgfarrowroundcap \advance\pgf@xa by.5\pgfarrowlinewidth \else \pgf@process{\pgfpointnormalised{\pgfqpoint{\pgfmathresultx\pgfarrowlength}{\pgfmathresulty\pgfarrowwidth}}}% \pgf@x.5\pgfarrowlinewidth% \advance\pgf@xa by\pgf@sys@tonumber{\pgf@y}\pgf@x% \fi% \pgfarrowssettipend{\pgf@xa} \pgfarrowssetbackend{-\pgf@xa} % Hull is always 8-point hull, except for tip % The following are needed in the code: \pgfarrowsupperhullpoint{\pgf@xa}{.25\pgfarrowwidth} \pgfarrowsupperhullpoint{.25\pgfarrowlength}{.5\pgfarrowwidth\ifpgfarrowroundcap\advance\pgf@y by.5\pgfarrowlinewidth\fi} \pgfarrowsupperhullpoint{-.25\pgfarrowlength}{.5\pgfarrowwidth\ifpgfarrowroundcap\advance\pgf@y by.5\pgfarrowlinewidth\fi} \pgfarrowsupperhullpoint{-\pgf@xa}{.25\pgfarrowwidth} \ifpgfarrowharpoon \pgfarrowshullpoint{-.5\pgfarrowlength\ifpgfarrowroundcap\advance\pgf@x by-.5\pgfarrowlinewidth\fi}{-.5\pgfarrowlinewidth} \pgfarrowshullpoint{.5\pgfarrowlength\ifpgfarrowroundcap\advance\pgf@x by.5\pgfarrowlinewidth\fi}{-.5\pgfarrowlinewidth} \fi \pgfarrowssavethe\pgfarrowlinewidth \pgfarrowssavethe\pgfarrowlength \pgfarrowssavethe\pgfarrowwidth \pgfarrowssave\pgfarrow@inc \pgfarrowssave\pgfarrown }, drawing code = { \pgfsetdash{}{+0pt} \ifpgfarrowroundcap\pgfsetroundcap\else\pgfsetbuttcap\fi \ifdim\pgfarrowlinewidth=\pgflinewidth\else\pgfsetlinewidth{+\pgfarrowlinewidth}\fi {% \pgfgettransform\pgf@temp@trans \pgftransformxscale{+.5\pgfarrowlength} \pgftransformyscale{+.5\pgfarrowwidth} \pgf@xa\pgfarrow@inc pt% \ifodd\pgfarrown\pgf@ya.25\pgf@xa\else\pgf@ya.5\pgf@xa\fi% \ifpgfarrowharpoon\pgf@yb180pt\else\pgf@yb360pt\fi \pgfutil@loop% \ifdim\pgf@ya<\pgf@yb% \pgfpathmoveto{\pgfpointpolar{+\pgf@ya}{+1pt}} \pgfpathlineto{\pgfpointorigin} \ifpgfarrowharpoon\ifdim\pgf@ya>\pgf@xa\else{\pgfsettransform\pgf@temp@trans\pgfpathlineto{\pgfqpoint{-.5\pgflinewidth}{0pt}}}\fi\fi \advance\pgf@ya by\pgf@xa\relax% \pgfutil@repeat% } \pgfusepathqstroke }, parameters = { \the\pgfarrowlinewidth,% \the\pgfarrowlength,% \the\pgfarrowwidth,% \pgfarrown,% \ifpgfarrowharpoon h\fi% \ifpgfarrowroundcap c\fi% } }% % Shorthands and Aliases: \pgfkeys{ LaTeX /.tip = {Latex}, Triangle /.tip = {Stealth[inset=+0pt, angle=+60:+2.7pt +3.6]}, Rectangle /.tip = {Square[length=+3pt +4.5,width'=+0pt +.5]}, Ellipse /.tip = {Circle[length=+3.3pt +4.95, width'=+0pt +0.5]}, Diamond /.tip = {Kite[inset'=+0pt .5]}, Turned Square /.tip = {Kite[length=+3pt 4,width'= +0pt 1,inset'= +0pt 0.5]}, To /.tip = {Computer Modern Rightarrow}, Bar /.tip = {Tee Barb[length=+0pt]}, Bracket /.tip = {Tee Barb[inset'=+0pt +1,length=+0.75pt +1]}, Parenthesis /.tip = {Arc Barb[arc=+120,length=+1.725pt +2.3]} }% \endinput