[pstricks] HOW TO add my arrowheads to PSTricks?
Christophe FOUREY
christophe.fourey at wanadoo.fr
Mon Feb 12 22:29:16 CET 2007
Le 12 février 2007 à 21:56, Christophe FOUREY a écrit :
> HOW TO add my arrowheads to PSTricks?
> I created new arrowheads, and I wish everybody can use them.
>
> Send them to this mailing list?
I send them to this mailing list.
Feel free to make corrections/modifications/etc.
(Arrowheads + Examples)
%
%
%
\documentclass{article}
\usepackage{pstricks}
\pagestyle{empty}
\begin{document}
\makeatletter
% v : Vee arrow (inside)
% V : Vee arrow (outside)
% f : Filled vee arrow (inside)
% F : Filled vee arrow (outside)
\edef\pst at arrowtable{\pst at arrowtable,v-v,V-V,f-f,F-F}
% Vee arrow
\def\psset at veearrowlength#1{\pst at getlength{#1}\psk at veearrowlength}
\psset at veearrowlength{3mm} % default projected length
\def\psset at veearrowangle#1{\pst at getangle{#1}\psk at veearrowangle}
\psset at veearrowangle{30} % default angle
\def\psset at veearrowlinewidth#1{\pst at getlength{#1}\psk at veearrowlinewidth}
\psset at veearrowlinewidth{.35mm} % default vee arrow line width
% Filled vee arrow
\def\psset at filledveearrowlength#1{\pst at getlength{#1}
\psk at filledveearrowlength}
\psset at filledveearrowlength{3mm} % default projected length
\def\psset at filledveearrowangle#1{\pst at getangle{#1}
\psk at filledveearrowangle}
\psset at filledveearrowangle{15} % default angle
\def\psset at filledveearrowlinewidth#1{\pst at getlength{#1}
\psk at filledveearrowlinewidth}
\psset at filledveearrowlinewidth{.35mm} % default vee arrow line width
\pst at def{VeeArrow}<%
1 setlinecap % round caps
1 setlinejoin % round join
setlinewidth % vee arrow line width
/y ED % projected length
2 div /a ED % angle (divide by 2)
/t ED % false = inside, true = outside
a sin a cos div y mul /x ED % perpendicular length : x=tan(a).y
t { 1 -1 scale } if % if outside : symmetry
x neg y moveto % point #1
0 0 L % point #2
x y L % point #3
{closepath gsave fill grestore} if % if filled : close and fill
stroke % draw line
0 t {y 2 mul} {0} ifelse moveto> % if outside : twice longer line
% VeeArrow : filled? outside? (total) angle (projected)
length (arrow) line width
\@namedef{psas at v}{%
false false \psk at veearrowangle \psk at veearrowlength
\psk at veearrowlinewidth \tx at VeeArrow}
\@namedef{psas at V}{%
false true \psk at veearrowangle \psk at veearrowlength
\psk at veearrowlinewidth \tx at VeeArrow}
\@namedef{psas at f}{%
true false \psk at filledveearrowangle \psk at filledveearrowlength
\psk at filledveearrowlinewidth \tx at VeeArrow}
\@namedef{psas at F}{%
true true \psk at filledveearrowangle \psk at filledveearrowlength
\psk at filledveearrowlinewidth \tx at VeeArrow}
% And An another arrowhead
% architectural tick / oblique arrow
\edef\pst at arrowtable{\pst at arrowtable,t-t,T-T}
% Tick arrow
\def\psset at tickarrowlength#1{\pst at getlength{#1}\psk at tickarrowlength}
\psset at tickarrowlength{1.5mm} % default projected length
\def\psset at tickarrowlinewidth#1{\pst at getlength{#1}
\psk at tickarrowlinewidth}
\psset at tickarrowlinewidth{.35mm} % default tick arrow line width
\pst at def{TickArrow}<%
1 setlinecap % round caps
1 setlinejoin % round join
setlinewidth % tick line width
/y ED % projected length
/t ED % false = normal, true = reversed
t { 1 -1 scale } if % if reversed : symmetry
y neg y moveto % point #1
y y neg L % point #2
stroke % draw line
0 0 moveto> % origin
\@namedef{psas at t}{%
false \psk at tickarrowlength \psk at tickarrowlinewidth \tx at TickArrow}
\@namedef{psas at T}{%
true \psk at tickarrowlength \psk at tickarrowlinewidth \tx at TickArrow}
\makeatother
%\pstVerb{1 setlinecap}
%\pstVerb{1 setlinejoin}
%\psset{veearrowlength=3mm,veearrowangle=30,veearrowlinewidth=.35mm}
%\psset{veearrowfill=true}
%\psset{veearrowfill=false}
Examples:
\vspace{2cm}
\psset{unit=5mm}
\begin{pspicture}(4,6)
\psset{dimen=middle,arrows=c-c}
\psset{linewidth=.25mm}
\psline[linecolor=red,linewidth=.05mm](0,0)(0,6)
\psline[linecolor=red,linewidth=.05mm](4,0)(4,6)
\psline{v-v}(0,6)(4,6)
\psline{v-V}(0,4)(4,4)
\psline{V-v}(0,2)(4,2)
\psline{V-V}(0,0)(4,0)
\end{pspicture}
\vspace{2cm}
\psset{unit=5mm}
\begin{pspicture}(4,6)
\psset{dimen=middle,arrows=c-c}
\psset{linewidth=.25mm}
\psline[linecolor=red,linewidth=.05mm](0,0)(0,6)
\psline[linecolor=red,linewidth=.05mm](4,0)(4,6)
\psline{f-f}(0,6)(4,6)
\psline{f-F}(0,4)(4,4)
\psline{F-f}(0,2)(4,2)
\psline{F-F}(0,0)(4,0)
\end{pspicture}
\vspace{2cm}
\psset{unit=5mm}
\begin{pspicture}(4,6)
\psset{dimen=middle,arrows=c-c}
\psset{linewidth=.25mm}
\psline[linecolor=red,linewidth=.05mm](0,0)(0,6)
\psline[linecolor=red,linewidth=.05mm](4,0)(4,6)
\psline{t-t}(0,6)(4,6)
\psline{t-T}(0,4)(4,4)
\psline{T-t}(0,2)(4,2)
\psline{T-T}(0,0)(4,0)
\end{pspicture}
\end{document}
More information about the PSTricks
mailing list