%% BEGIN pst-text.tex %% $Id: pst-text.tex 891 2018-12-29 19:42:20Z herbert $ %% %% Placing text on a path with PSTricks 97. %% See the PSTricks User's Guide for description. %% This uses the header file `pst-text.pro'. %% %% %% COPYRIGHT 1993, 1994, 1999 by Timothy Van Zandt, tvz@nwu.edu. %% 2006--2019 Herbert Voss %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN %% archives in directory macros/latex/base/lppl.txt. %% % \csname PSTextPathLoaded\endcsname \let\PSTextPathLoaded\endinput \ifx\PSTricksLoaded\endinput\else\input pstricks \fi %\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi % \def\fileversion{1.01} \def\filedate{2018/12/22} \message{ v\fileversion, \filedate (tvz,hv)} \edef\TheAtCode{\the\catcode`\@} \catcode`\@=11 \pst@addfams{pst-text} \pstheader{pst-text.pro} % \def\pstextpath{\@ifnextchar[{\pstextpath@}{\pstextpath@[l]}} \def\pstextpath@[#1]{% \@ifnextchar({\pstextpath@@[#1]}{\pstextpath@@[#1](0,\TPoffset)}} \def\pstextpath@@[#1](#2)#3{\pst@makebox{\pstextpath@@@[#1](#2){#3}}} \def\pstextpath@@@[#1](#2,#3)#4{% \pst@killglue \begingroup \ifx c#1\relax \def\pst@tempa{.5}% \else \ifx r#1\relax \def\pst@tempa{1}% \else \def\pst@tempa{0}% \fi \fi \def\use@pscode{% \pst@Verb{% /mtrxc CM def \tx@STV CP translate newpath \pst@code mtrxc setmatrix 0 setgray}% \gdef\pst@code{}}% \def\psclip#1{\pst@misplaced\psclip}% \let\endpsclip\relax \def\@multips(##1)(##2)##3##4{\pst@misplaced\multips}% \def\nc@object##1##2##3##4{\pst@misplaced{node connection}}% \def\PSTtoEPS@i##1##2{\pst@misplaced\PSTtoEPS}% \pssetlength\pst@dima{#2}% \pssetlength\pst@dimb{#3}% \setbox\pst@hbox\hbox{% \hbox to\z@{% \kern -\wd\pst@hbox % BoxWidth = CurrX - Hoffset. \pstVerb{tx@TextPathDict begin currentpoint pop /Hoffset exch def end}% \kern\pst@dima % XOffset = Voffset - Hoffset (extra horizontal skip) \pstVerb{tx@TextPathDict begin currentpoint pop /Voffset exch def end}% \hss \pstVerb{% /tx@TextPathSavedShow /show load def \pst@dict \tx@PathLength end dup 0 gt { tx@TextPathDict begin \pst@tempa\space InitTextPath end /show { tx@TextPathDict begin TextPathShow end } def } { pop } ifelse}}% \raise\pst@dimb\box\pst@hbox \pstVerb{% currentpoint newpath moveto /show /tx@TextPathSavedShow load def}}% \wd\pst@hbox=\z@ \dp\pst@hbox=\z@ \ht\pst@hbox=\z@ \leavevmode \hbox{{#4}\box\pst@hbox}% \endgroup\ignorespaces} % \def\TPoffset{-0.7ex} % \def\tx@CharPathShow{% /tx@CharPathSavedShow /show load def /show { % These 3 lines check whether charpath yields anything interesting. dup gsave newpath 0 0 moveto true charpath pathbbox grestore 3 -1 roll eq 3 1 roll eq and % If not, just use show. { tx@CharPathSavedShow } % Otherwise, use charpath. { true charpath } ifelse } def } % \def\pscharpath{\def\pst@par{}\pst@object{pscharpath}} \def\pscharpath@i{\pst@makebox\pscharpath@ii} \def\pscharpath@ii{% \leavevmode\hbox{% \pstVerb{\tx@CharPathShow}% \box\pst@hbox \pstVerb{/show /tx@CharPathSavedShow load def}% % DG/SR modification begin - Nov. 26, 1998 - Patch 2 % \if@star is true but \solid@star must not be executed in \begin@ClosedObj ! % \begin@ClosedObj \let\solid@starOLD\solid@star \let\solid@star\relax \begin@ClosedObj \let\solid@star\solid@starOLD % DG/SR modification end \def\pst@linetype{1}% \psdashadjustfalse \showpointsfalse \let\pst@newpath\@empty \def\use@pscode{% \pst@Verb{ gsave \tx@STV \pst@code grestore % DG/SR modification begin - Jul. 3, 1998 / Mar. 11, 1999 - Patches 1 and 3 % \if@star\else CP newpath moveto \fi}}% \if@star\else CP newpath moveto \fi}% \gdef\pst@code{}}% % DG/SR modification end \end@ClosedObj}} % \def\pscharclip{\def\pst@par{}\pst@object{pscharclip}} \def\pscharclip@i{\pst@makebox\pscharclip@ii} \def\pscharclip@ii{% \leavevmode \begingroup \begin@psclip {\@startrue\pscharpath@ii}% \pstVerb{clip \if@star\else currentpoint newpath moveto\fi}% \def\endpscharclip{\end@psclip\endgroup}% \ignorespaces} \def\endpscharclip{\pst@misplaced\endpscharclip} % \define@key[psset]{pst-text}{font}[NimbusSanL-Regu]{\def\psk@warpfont{#1 }} \define@key[psset]{pst-text}{fontsize}[24pt]{\pst@getlength{#1}\psk@warpfontsize} \psset[pst-text]{font=NimbusSanL-Regu,fontsize=24pt} \def\psWarp{\def\pst@par{}\pst@object{psWarp}} \def\psWarp@i{\@ifnextchar(\psWarp@ii{\psWarp@ii(0,0)}} \def\psWarp@ii(#1)#2{% \addbefore@par{linewidth=0.1pt,doublecolor=blue}% \begin@ClosedObj \pst@getcoor{#1}\pst@tempCoor \pstverb{ /\psk@warpfont findfont \psk@warpfontsize\space scalefont setfont /amplitude \psk@warpfontsize\space 0.75 mul def /damplitude amplitude 1.05 mul def /warptxt (#2) def /warpwidth warptxt stringwidth pop def /warphalf warpwidth 2 div def \pst@tempCoor translate 0 \psk@warpfontsize\space neg moveto 0 amplitude moveto %%% orig 0 1 warpwidth { amplitude lineto } for warpwidth -1 0 { damplitude lineto } for closepath tx@TextPathDict begin warpit gsave \pst@usecolor\psdoublecolor fill grestore \pst@number\pslinewidth setlinewidth stroke end 0 0 moveto warptxt true charpath tx@TextPathDict begin warpit gsave \pst@usecolor\psfillcolor fill grestore \pst@number\pslinewidth setlinewidth stroke end } \end@ClosedObj } % \def\psCircleText{\def\pst@par{}\pst@object{psCircleText}} \def\psCircleText@i{\@ifnextchar(\psCircleText@ii{\psCircleText@ii(0,0)}} \def\psCircleText@ii(#1)#2{% \addbefore@par{fillcolor=red!40,linewidth=0.01pt,radius=2cm}% \begin@ClosedObj \pst@getcoor{#1}\pst@tempCoor \pssetlength\pst@dimb\psk@radius \pstverb{ /\psk@warpfont findfont \psk@warpfontsize\space scalefont setfont /circtxt (#2) def /circwidth circtxt stringwidth pop def \pst@tempCoor translate circwidth 2 div neg \pst@number\pst@dimb moveto circtxt true charpath tx@TextPathDict begin circit gsave \pst@usecolor\psfillcolor fill grestore \pst@number\pslinewidth setlinewidth stroke end }% \end@ClosedObj } % \catcode`\@=\TheAtCode\relax \endinput %% %% END pst-text.tex