Current File : //usr/share/texlive/texmf-dist/tex/generic/pst-text/pst-text.tex |
%% 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 <hvoss@tug.org>
%%
%% 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