Il codice che segue è stato realizzato modificando la definizione dello stile [tt]open triangle 45[/tt]. La lunghezza della punta della freccia non dipende più dallo spessore di linea, ma viene passata direttamente all’interno del comando [tt]\draw[/tt] tramite la chiave [tt]/punta[/tt] (nota la barra dritta). Puoi assegnare esplicitamente un valore, oppure usare quello di default o non invocare proprio [tt]/punta[/tt] (in quest’ultimo caso viene utilizzato il valore assegnato nella riga che incomincia con [tt]\pgfsetarrowoptions[/tt]. Penso che gli esempi siano chiari.
`
\documentclass{article}
\usepackage{tikz}
% Codice per lo stile della freccia
\pgfarrowsdeclare{freccia45}{freccia45}
{
\pgfarrowsleftextend{0pt}
\pgfarrowsrightextend{+\pgfgetarrowoptions{freccia45}}
}
{
\pgfmathsetlengthmacro{\lun}{\pgfgetarrowoptions{freccia45}/cos(22.5)}
\pgfsetdash{}{+0pt}
\pgfsetmiterjoin
\pgfpathmoveto{\pgfpointadd{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}{\pgfqpointpolar{157.5}{\lun}}}
\pgfpathlineto{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}
\pgfpathlineto{\pgfpointadd{\pgfqpoint{\pgfgetarrowoptions{freccia45}}{0pt}}{\pgfqpointpolar{-157.5}{\lun}}}
\pgfpathclose
\pgfusepathqstroke
}
\def\miodef{0.4cm} % imposta il valore di default
\pgfsetarrowoptions{freccia45}{\miodef} % valore utilizzato se /punta non viene invocato
\pgfkeys{/punta/.default=\miodef, /punta/.code={\pgfsetarrowoptions{freccia45}{#1}}}
\begin{document}
\begin{tikzpicture}
\draw [-freccia45, /punta=3pt] (0,3) — (3,3);
\draw [-freccia45, /punta] (0,2) — (3,2);
\draw [-freccia45, /punta=1cm] (0,1) — (3,1);
\draw [-freccia45] (0,0) — (3,0);
\end{tikzpicture}
\end{document}`
Ciao