1 %% This work may be distributed and/or modified under the
2 %% conditions of the LaTeX Project Public License, either version 1.3
3 %% of this license or (at your option) any later version.
4 %% The latest version of this license is in
5 %% http://www.latex-project.org/lppl.txt
6 %% and version 1.3 or later is part of all distributions of LaTeX
7 %% version 2003/12/01 or later.
9 \csname PSTANAMORPHOSISAddLoaded
\endcsname
10 \let\PSTANAMORPHOSISAddLoaded\endinput
11 % Requires some packages
12 \ifx\PSTANAMORPHOSISLoaded\endinput\else \input pst-anamorphosis
\fi
13 \ifx\PSTnodesLoaded\endinput\else\input pst-node
\fi
14 \ifx\MultidoLoaded\endinput\else \input multido.tex
\fi
15 \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey
\fi
17 \def\filedate{2011/
10/
19}
18 \message{`PSTANAMORPHOSISAdd' v
\fileversion,
\filedate}
21 \edef\PstAtCode{\the\catcode`\@
} \catcode`\@=
11\relax
25 \pst@def
{optionsanamorphosisAdd
}<
%
26 \psk@Anamorphose@translate
32 \def\pslineA{\pst@object
{pslineA
}}
35 \tx@optionsanamorphosis
36 \tx@optionsanamorphosisAdd
40 \pst@getcoors
[\pslineA@ii
%
44 \ifx\pslinestyle\psls@@symbol
\addto@pscode
{ \psls@symbol SymbolLine
}%
48 /n1 lespoints length
2 div cvi def
% nbre de points
58 % Tableau general des points
61 TableauPoints i get aload pop
63 TableauPoints i
1 add get aload pop
68 K X2 mul
1 K sub X1 mul add
69 K Y2 mul
1 K sub Y1 mul add
70 tx@anamorphosisPathDict begin Anamorphose end
78 TAB compteur get aload pop
80 % \ifPst@noCurrentPoint\else\pst@cp\fi % current point?
81 \pslineA@iii
% arc and lineto type
82 \tx@Line
% .pro function
89 /r
\pst@number
\pslinearc def
90 /Lineto
{ \tx@Arcto
} def
92 /Lineto /lineto load def
94 \ifshowpoints true
\else false
\fi
98 \def\pscircleA{\def\pst@par
{}\pst@object
{pscircleA
}}
99 \def\pscircleA@i
{\@ifnextchar(
{\pscircleA@do
}{\pscircleA@do(
0,
0)
}}
100 \def\pscircleA@do(
#1)
#2{%
103 \pssetlength\pst@dimc
{#2}%
104 \def\pst@linetype
{4}%
106 \tx@optionsanamorphosis
107 \tx@optionsanamorphosisAdd
108 \pst@coor /yC exch def /xC exch def
109 \ifPst@SpecialLength
\pst@SpecialLength
\else \pst@number
\pst@dimc
\fi
110 \psk@dimen CLW mul sub
113 tx@anamorphosisPathDict begin Anamorphose end
115 0 1 360 {/iA exch def
116 iA cos rayon mul xC add
117 iA sin rayon mul yC add
118 tx@anamorphosisPathDict begin Anamorphose end
121 \ifPst@variableLW
\pst@flattenpath
\fi
128 \def\psbezierA{\pst@object
{psbezierA
}}
131 \tx@optionsanamorphosis
132 \tx@optionsanamorphosisAdd
136 \pst@getcoors
[\psbezierA@ii
%
142 [0 2 lespoints length
2 sub
{/iP ED
144 lespoints iP
1 add get
145 tx@anamorphosisPathDict begin Anamorphose end
147 \ifPst@noCurrentPoint
\else\pst@cp
\fi
148 \ifshowpoints true
\else false
\fi
149 \ifx\pslinestyle\psls@@symbol
\psls@symbol OpenSymbolBezier
152 \ifshowpoints \tx@BezierShowPoints
\fi
155 \def\pst@linetype
{1}%
156 \ifx\pslinestyle\psls@@symbol
\def\pslinestyle{none
}\fi%
159 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
160 \def\pscurveA{\pst@object
{pscurveA
}}
163 \tx@optionsanamorphosis
164 \tx@optionsanamorphosisAdd
168 \pst@getcoors
[\pscurveA@ii
% \pst@coors on stack
174 [0 2 lespoints length
2 sub
{/iP ED
176 lespoints iP
1 add get
177 tx@anamorphosisPathDict begin Anamorphose end
179 \ifPst@noCurrentPoint
\else\pst@cp
\fi % current point
180 \psk@curvature
\space /c ED /b ED /a ED
181 \ifshowpoints true
\else false
\fi
182 \ifx\pslinestyle\psls@@symbol
\psls@symbol OpenSymbolCurve
\else \tx@OpenCurve
\fi
183 \ifPst@variableLW
\pst@flattenpath
\fi
185 \ifx\pslinestyle\psls@@symbol
\def\pslinestyle{none
}\fi%
189 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
190 \def\psccurveA{\pst@object
{psccurveA
}}
193 \tx@optionsanamorphosis
194 \tx@optionsanamorphosisAdd
198 \pst@getcoors
[\psccurveA@ii
% \pst@coors on stack
204 [0 2 lespoints length
2 sub
{/iP ED
206 lespoints iP
1 add get
207 tx@anamorphosisPathDict begin Anamorphose end
209 \ifPst@noCurrentPoint
\else\pst@cp
\fi % current point
210 \psk@curvature
\space /c ED /b ED /a ED
211 \ifshowpoints true
\else false
\fi
212 \ifx\pslinestyle\psls@@symbol
\psls@symbol ClosedSymbolCurve
\else \tx@ClosedCurve
\fi
213 \ifPst@variableLW
\pst@flattenpath
\fi
215 \ifx\pslinestyle\psls@@symbol
\def\pslinestyle{none
}\fi%
219 \def\pnodeA{\def\pst@par
{}\pst@object
{pnodeA
}}
220 \def\pnodeA@i(
#1)
#2{{%
223 \tx@optionsanamorphosis
224 \tx@optionsanamorphosisAdd
226 tx@anamorphosisPathDict begin Anamorphose end
227 \pst@number
\psyunit div exch
228 \pst@number
\psxunit div exch
233 \def\movetoA{\def\pst@par
{}\pst@object
{movetoA
}}
234 \def\movetoA@i(
#1)
{{%
237 \tx@optionsanamorphosis
238 \tx@optionsanamorphosisAdd
240 tx@anamorphosisPathDict begin Anamorphose end
243 % choix de la police et de la taille des caracteres en cm !!
244 \define@key
[psset
]{pst-anamorphosis
}{PSfont
}{\def\pst@Anamorphose@PSfont
{/
#1 }}
245 \define@key
[psset
]{pst-anamorphosis
}{fontsize
}{\def\pst@Anamorphose@fontsize
{#1 }}
246 %\define@key[psset]{pst-anamorphosis}{RotationAngleText}{\edef\psk@Anamorphose@RotationAngleText{#1 }}%
247 \psset[pst-anamorphosis
]{PSfont=Times-Roman,fontsize=
35}%,RotationAngleText=0}
249 \def\pstextA{\def\pst@par
{}\pst@object
{pstextA
}}
250 \def\pstextA@i
{\@ifnextchar(
{\pstextA@do
}{\pstextA@do(
0,
0)
}}
251 \def\pstextA@do(
#1)
#2{% #2 = texte à transformer
256 \pst@coor /t@@y ED /t@@x ED
% Translate
257 \tx@optionsanamorphosis
258 /fontsize
{\pst@Anamorphose@fontsize
} bind def
259 /PSfont
{\pst@Anamorphose@PSfont
} def
260 %/RotationAngleText \psk@Anamorphose@RotationAngleText def
261 %% D'après un fichier original de
262 %%(c) P. Kleiweg 1997
265 %% Arnaud Schmittbuhl
266 %% Jean-Paul Vignault
267 %% les commentaires sont de Jean-Paul Vignault
269 %% Caractères accentués
270 /ReEncode
{ exch findfont
271 dup length dict begin
{ 1 index /FID eq
{pop pop
} {def
} ifelse
272 }forall /Encoding ISOLatin1Encoding def currentdict end definefont
274 /Font PSfont /ISOfont ReEncode /ISOfont def
275 %% decalage en picas du texte en
276 %% dessous de la ligne y=0
277 %% la procedure de base pour la transformation des points du chemin
280 tx@anamorphosisPathDict begin Anamorphose end
283 %% pour remplacer 'move'
285 %% on teste le booleen place 2 tokens plus en avant sur la pile
286 %% si c'est 'true', alors on en est au 1er appel => on initialise
291 %% puis on applique warp a notre point
293 %% on enleve le 'true' pour mettre un 'false' a la place
296 %% pour remplacer 'lineto
300 %% pour remplacer 'curveto'
307 %% 'warpit' declenche la transformation du chemin courant
310 { warpmove
} { warpline
} { warpcurve
} { closepath
} pathforall
313 %% definition des differentes constantes
314 % taille de des caracteres
315 Font findfont fontsize scalefont setfont
316 /warptxt (
#2) def
% texte a deformer
317 /warpwidth warptxt stringwidth pop def
% largeur horizontale du texte
318 /warphalf warpwidth
2 div def
% demi-largeur horizontale
319 %% le chemin constitue avec la chaine de caracteres
320 warptxt warphalf neg
0 moveto
%% on se deplace (init chemin)
321 true charpath
%% on cree le chemin
322 %% maintenant on y va
323 warpit
%% on applique le pathforall
325 \pst@usecolor
\psfillcolor
329 % le texte dans le cercle
332 warptxt warphalf neg
0 moveto
%% on se deplace (init chemin)
335 \pst@usecolor
\psfillcolor
346 %% =============================================================================
347 %% AFP : Anamorphose à partir d'un Fichier PST.
348 %% Le code de pscustom est évalué après reroutage de la macro. Il est exécuté
349 %% dans le contexte tx@anamorphosisPathDict
350 %% =============================================================================
352 \def\pst@begin@AFP
{\xdef\pst@code
{\pst@code
353 tx@anamorphosisPathDict begin
354 \tx@optionsanamorphosis
355 \tx@optionsanamorphosisAdd
\space}}
356 \def\pst@end@AFP
{\xdef\pst@code
{\pst@code end
\space}}
357 %% pscustom adapté à la tâche
358 \def\pscustomAFP{\def\pst@par
{}\pst@object
{pscustomAFP
}}
359 \long\def\pscustomAFP@i
#1{%
362 \the\pst@customAFPdefs
363 \setbox\pst@hbox=
\hbox{#1}%
368 %% pscustomdefs associé
369 \newtoks\pst@customAFPdefs
371 \def\moveto(
#1)
{\pst@@getcoor
{#1}\addto@pscode
{\pst@coor moveto
}}%
372 \def\psline(
#1)
{\pst@@getcoor
{#1}\addto@pscode
{\pst@coor lineto
}}%
373 \def\closepath{\addto@pscode
{closepath
}}%
374 \def\newpath{\addto@pscode
{newpath
}}%
375 \def\stroke{\def\pst@par
{}\pst@object
{stroke
}}%
376 \def\fill{\def\pst@par
{}\pst@object
{fill
}}%
380 \def\curvetoinv{\pst@getcoors
{\space}\fcurvetoinv}
381 \def\fcurvetoinv{\addto@pscode
{curvetoinv
}}
382 \let\SAUVEpscustom\pscustom
383 \let\SAUVEpsbezier\psbezier
384 \let\pscustom\pscustomAFP
385 \let\psbezier\curvetoinv
387 \let\psbezier\SAUVEpsbezier
388 \let\pscustom\SAUVEpscustom
391 %%%% Fin de AFP %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%