%% BEGIN pst-user.sty %% %% Macros for typesetting pst-user.tex v0.93, 0.93a. \input tvz-user.sty \input art12.sty \input npsfont.sty \input pstricks.tex \input pst-node.tex \input pst-coil.tex \input pst-plot.tex \def\thetitle{PSTricks: User's Guide} \let\theheadertitle\thetitle % Used with twoside option. \let\fileversion\Version \let\filedate\Date % Paragraphs are marked by large space rather than indentation: \parindent 0pt \parskip 7pt plus 1pt minus 1pt % These are for 8.5inx11in paper: \oddsidemargin 5cm \evensidemargin 5cm \textwidth 11.5cm % Total bottom margin 1in, text height 8.8in \topmargin\z@ \textheight 8.8in \footskip .625in % No headers, 1in top margin \headheight 0pt \headsep 0pt % Marginal notes always on left. \marginparwidth 3.5cm \marginparsep .5cm \reversemarginpar % Now adjust margins for different paper size: % The a4 option sets \paperwidth and \paperheight for a4 paper: \@ifundefined{paperwidth}% {% \def\paperwidth{8.5in} \def\paperheight{11in} }{% \@tempdima=\paperwidth\relax \advance\@tempdima-8.5in \divide\@tempdima 2 \advance\oddsidemargin\@tempdima \advance\evensidemargin\@tempdima \@tempdima=\paperheight\relax \advance\@tempdima-11in \divide\@tempdima 2 \advance\topmargin\@tempdima } % Now adjust left and right margins for twosided printing: \if@twoside \advance\oddsidemargin.75cm \advance\evensidemargin-.75cm \fi %%%%%%%%%%%%%%% SECTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Section headings use customizable fonts, leave less space above % and below, and may overhang on left. \def\section{\@startsection{section}{1}{\sechang}% {-3ex plus -1ex minus -.2ex}{1.5ex plus .2ex}{\secfont}} \def\subsection{\@startsection{subsection}{2}{\subsechang}% {-2.75ex plus -1ex minus -.2ex}{1.25ex plus .2ex}{\subsecfont}} \newdimen\sechang \newdimen\subsechang \sechang=-.75in \subsechang=-.375in \def\secfont{\sf\LARGE\bf} % Section headings \def\subsecfont{\sf\Large\bf} % Subsection headings %%%%%%%%%%%%%%%%%%%% FONTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% See npsfonts.sty for the macros used below. %% These font definitions require the NFSS. \newpsfamily[.96]{times}{ {m}{n}{ptmr}, %Times {m}{it}{ptmri}, % {m}{sl}{ptmri}, % {bx}{n}{ptmb}, %Times-Bold {bx}{it}{ptmbi}, % {bx}{sl}{ptmbi}} % \newpsfamily[.82]{helvetica}{ {m}{n}{phvr}, %Helvetica {m}{it}{phvro}, %Helvetica-Oblique {m}{sl}{phvro}, %Helvetica-Oblique {bx}{n}{phvb}, %Helvetica-Bold {bx}{it}{phvbo}, %Helvetica-BoldOblique {bx}{sl}{phvbo}} %Helvetica-BoldOblique \newpsfamily[.96]{courier}{ {m}{n}{pcrr}, %Courier {bx}{n}{pcrb}, %Courier-Bold {m}{it}{pcrr}, %Courier-Oblique {bx}{it}{pcrb}} %Courier-BoldOblique \newpsfamily[.965]{symbol}{{m}{n}{rpsyr}} %Symbol \renewcommand{\default@family}{times}% \renewcommand{\rmdefault}{times}% \renewcommand{\ttdefault}{helvetica}% \renewcommand{\sfdefault}{helvetica}% \family\default@family\selectfont \define@mathgroup\mv@normal{0}{times}{m}{n} \define@mathgroup\mv@normal{1}{times}{m}{it} \define@mathgroup\mv@bold{0}{times}{bx}{n} \define@mathgroup\mv@bold{1}{times}{bx}{it} % A few tricks to avoid math fonts: \def\AmS{AMS} \def\symchar#1{% \mbox{% \kern .3pt \family{symbol}\series{m}\shape{n}\selectfont \char#1 \kern .3pt}} \def\lt{\symchar{'074}} \def\gt{\symchar{'076}} \def\leq{\symchar{'243}} \def\geq{\symchar{'263}} \def\bullet{\symchar{'267}} \def\ldots{\symchar{'274}} \mathcode`\-="20B1 % The font commands: \def\MainFont{\tt\bf\large} % For macro definitions. \def\UsageFont{\tt\bf} % For in-line macro names. \def\InlineFont{\tt} % For other in-line snipets of code. \def\MetaFont{\sf\sl} % For meta arguments. \def\OpArgFont{\series{m}\selectfont} % For optional arguments. % is short for {\MetaFont foo}. % Works with \Verb command and LVerb* environment, % but is disabled in LVerb environment. \catcode`\<=13 \def<#1>{{\MetaFont #1\/}} % Short-cuts for coordinates: \def\x#1{{\MetaFont x#1\/}} \def\y#1{{\MetaFont y#1\/}} \def\c#1{{\InlineFont(\x{#1},\kern 1pt\y{#1})}} \def\cn{\c{n}} %%%%%%%%%%%%%%%%%%%%%%%% VERBATIM %%%%%%%%%%%%%%%%%%%%%%%%%%%% \renewcommand{\EveryVerbatimLine}[2]{} \renewcommand{\EveryVerbOutLine}[2]{} \renewcommand{\VerbatimSpace}{\ \ } \renewcommand{\VerbSpace}{\ \ } \renewcommand{\EveryVerbatimCodes}{% \catcode`\"=14 \catcode`\<=12} \newenvironment{LVerb*}% {\VerbatimEnvironment \renewcommand{\ThisVerbCodes}{\catcode`\<=13}% \LVerbatim}% {\endLVerbatim} \newenvironment{LVerb}{\VerbatimEnvironment\LVerbatim}{\endLVerbatim} \renewcommand{\EveryVerbOutCodes}{% \catcode`\"=12 \catcode`\<=12} % Verbatim items: \newcommand{\vitem}{\SaveVerb[{\item[\UseVerb{\MyTemp}]}]{\MyTemp}} %%%%%%%%%%%%%%%%%%%%%%% EXAMPLE ENVIRONMENTS %%%%%%%%%%%%%%%%%%%% % The Example environment uses the fancybox.sty macros % 1. Save example verbatim to \jobname.tmp, % 2. Input verbatim with \catcode`\"=14 (" is a comment). % 3. Input again with \catcode\`"=9 (" is ignored). % There are 5 example environments: % 1. example : center output % 2. example* : process output with no special formatting. % 3. example** : Place on left side of verbatim input. % 4. MEx : Like example**, but contents put in picture environment. % 5. MEx* : Like MEx, but with grid. \newcommand{\BeginExample}{% \VerbatimEnvironment \catcode`\<=12 \begin{VerbatimOut}{\jobname.tmp}} \newcommand{\EndExample}{% \end{VerbatimOut}%. \renewcommand{\EveryVerbatimLine}{}% \catcode`\"=9\relax} \newenvironment{example}{\BeginExample}% {\EndExample\LVerbatimInput{\jobname.tmp}% \begin{center}\leavevmode\input{\jobname.tmp}\end{center}} \newenvironment{example*}{\BeginExample}% {\EndExample\LVerbatimInput{\jobname.tmp}\input{\jobname.tmp}} \newenvironment{example**}{\BeginExample} {\EndExample\SideBySideEx{\input{\jobname.tmp}}} \newif\ifgrid \newpsobject{usergrid}{psgrid}{subgriddiv=1,griddots=10,gridlabels=7pt} \def\MEx{\@ifnextchar[{\@MEx}{\@MEx[0,0]}} \def\@MEx[#1,#2](#3,#4){% \def\PictureSize{(#1,#2)(#3,#4)}% \BeginExample} \def\endMEx{% \EndExample \SideBySideEx{% \expandafter\pspicture\PictureSize \ifgrid\usergrid\fi\relax \input{\jobname.tmp}% \endpspicture}} \def\SideBySideEx#1{% \trivlist\item[]% \leavevmode\kern-\@totalleftmargin \hbox{\valign{% \vfil##\vfil\cr \hbox to \z@{\hss#1}\cr \hbox to \leftmargini{\hss}\cr \hbox{\BVerbatimInput{\jobname.tmp}}\cr}}% \endtrivlist} \@namedef{MEx*}{\gridtrue\MEx} \@namedef{endMEx*}{\endMEx} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% QUICK REFERENCE %% The macro definitions are stored in in the command sequence %% \quickref as they appear in the text. This is much easier %% than trying to output the stuff to an auxiliary file and having %% to worry about catcodes. % An entry in \quickref is of the form: \qentry{type}{entry} \def\quickref{} \long\def\addtoquickref#1#2{% \expandafter\gdef\expandafter\quickref\expandafter{% \quickref\qentry{#1}{#2}}} \def\qentry#1{\@nameuse{qr@#1}} %% For switching into landscape mode for the Quick Reference: \let\NormalShipout\shipout \newbox\OutputBox \def\LandscapeMode{% \long\def\shipout##1##2{% \setbox\OutputBox=\hbox{\rput[tl]{90}{\vbox{##2}}}% \NormalShipout\box\OutputBox}% \voffset 9in} % This makes the Quick Reference: \def\QuickReference{% \begin{Landscape}{\paperwidth}{\paperheight}{\rotateleft} \oddsidemargin 0pt \evensidemargin 0pt \topmargin -.5in \textheight 6.5in \textwidth 9in \columnsep 60pt \footskip 0pt \footheight 0pt \headheight 15pt \headsep 40pt \parskip 4pt plus 1pt minus 1pt \UsePageParameters \twocolumn \def\label##1{} \subsechang=-.25in \pagenumbering{Roman} \pagestyle{quickref} \MacroDefCodes \let\Main\string \let\MainFont\UsageFont \MainFont \quickref \end{Landscape}} \def\ps@quickref{% \def\@oddhead{% \large\bf\sf \hbox to .5\textwidth{PSTricks\hfill}% \hbox to \z@{\hss Quick Reference\hss}% \hbox to .5\textwidth{\hfill\thepage}} \let\@evenhead\@oddhead \def\@oddfoot{}\def\@evenfoot{}} % For page numbering in the QR: \setbox\pst@boxg=\hbox{\UsageFont 99} \newdimen\refnumdim \refnumdim=\wd\pst@boxg \def\refnum#1{\hbox to \refnumdim{\hss\rm\bf\pageref{#1}}} % Section commands that add an entry to the QR: \def\Section#1{\addtoquickref{section}{#1}\@checksec\section{#1}} \def\Subsection#1{\addtoquickref{section}{#1}\subsection{#1}} % This is just an error checker: \def\@checksec{% \def\@tempa{document}% \ifx\@tempa\@currenvir\else \@latexerr{\string\Section\space occurred inside \@currenvir\space environment}\@ehc \expandafter\end\expandafter{\@currenvir}% \expandafter\@checksec \fi} % The qr@ definitions: \def\qr@@object#1{\mbox{\begingroup\escapechar`\+% \refnum{\string#1}\endgroup\hskip 1em\string#1}} \def\qr@object#1{\qr@@object#1\par} \def\qr@@param#1=#2\@nil{\refnum{\string#1}} \def\qr@param#1{\leavevmode\hbox to\hsize{\qr@@param#1\@nil\hskip 1em#1}\par} \def\qr@section#1{\subsection*{#1}} \long\def\qr@center#1{\begin{center}#1\end{center}} %%%%%%%%%%%%%%%%%%%%% PARTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \font\bighelv=phvb at 88bp \def\part{\clearpage\leavevmode\@ifstar{\@@part}{\@part}} \def\@part#1{% \refstepcounter{part}% \addcontentsline{toc}{part}{\protect\pnumberline{\thepart}#1}% \lower 20pt\hbox to \z@{\hss{\bighelv\Roman{part}}\hskip 2em}% \@@@part{#1}} \def\@@part#1{\addcontentsline{toc}{part}{#1}\@@@part{#1}} \def\@@@part#1{\markright{#1}{\sf\Huge\bf#1}\par\vskip 2cm\@afterheading} \def\thepart{\Roman{part}} \def\pnumberline#1{\hbox to\z@{\hss#1\hskip\@tempdima}} \def\pnumberline#1{\hbox to2cm{Part #1\hfill}} \def\l@part#1#2{% \addpenalty{\@secpenalty}% \addvspace{\lpartskip}% \begingroup \@tempdima 1em \parindent \z@ \rightskip \@pnumwidth \parfillskip -\@pnumwidth {\large\bf\leavevmode#1\hfil \hbox to\@pnumwidth{\hss #2}}\par \nobreak \endgroup} \newskip\lpartskip \lpartskip 1.25em plus 1pt minus 1pt %%%%%%%%%%%%%%%%%% PARAMETER DEFINITIONS AND INDEXING %%%%%%%%%%%%%%% % Like \MainEnvIndex, etc., but for parameters: \def\MainParIndex{\SpecialIndex{parameter}{main}} \def\UsageParIndex{\SpecialIndex{parameter}{usage}} % Like \MainPar, but for parameters. Can optionally include =foo. \def\MainPar#1{\@MainPar#1==\@nil} \def\@MainPar#1=#2=#3\@nil{% \MainParIndex{#1}% \label{#1}% {\MainFont #1\ifx#3=\relax=\MetaFont#2\fi}} % Analogous to \n, but optionally argument can include =foo. \def\p#1{\@p#1==\@nil} \def\@p#1=#2=#3\@nil{% \UsageParIndex{#1}% {\UsageFont #1\ifx#3=\relax=#2\fi}} % For listing parameter definitions in a {description} environment: \def\pitem[#1]{\@ifnextchar({\@pitem#1}{\@@pitem#1\@nil}} \def\@pitem#1=#2(#3){% \item[\MainFont#1=\MetaFont#2]% % Set the definition in \MainFont \MainParIndex{#1}% \label{#1}% \addtoquickref{param}{#1={\MetaFont #2}\hfill {\rm Default:} #3}% \hfill {\MainFont {\rm Default:} #3}\par} \def\@@pitem#1=#2\@nil{% \@ifundefined{default@#1}% {\@warning{Parameter `#1' default not defined.}\@eha\@pitem#1=#2()} {\@pitem#1=#2(\csname default@#1\endcsname)}} % Read in a list of defaults extracted from pstricks.doc: \begingroup \catcode`\@=12 \catcode`\{=12 \catcode`\}=12 \catcode`\&=1 \catcode`\^=2 \def\psset@&% \begingroup \catcode`\\=12 \pssetxx^ \def\pssetxx#1{#2}&% \expandafter\gdef\csname default@#1\endcsname^% \endgroup^ \csname @input\endcsname&defaults.pst^ \endgroup % For putting parameter definitions in an Ex environment: \def\Par#1{\@ifnextchar({\@Par#1}{\@@Par#1\@nil}} \def\@Par#1=#2(#3){% \leavevmode \MainParIndex{#1}% \label{#1}% \addtoquickref{param}{#1={\MetaFont #2}\hfill {\rm Default:} #3}% \hbox to\linewidth{% \MainFont #1={\MetaFont#2}\hfill {\rm Default:} #3}\par} \def\@@Par#1=#2\@nil{% \@ifundefined{default@#1}% {\@warning{Parameter `#1' default not defined.}\@Par#1=#2()} {\@Par#1=#2(\csname default@#1\endcsname)}} %%%%%%%%%%%%%%%%%% MACRO DEFINITIONS AND INDEXING %%%%%%%%%%%%%%% % There are four commands for listing macro definitions: % 1. \mitem : List in a description environment % 2. \oitem : Like \mitem, but optional *[par] automatically inserted. % 3. \object : List in a description environment. % 4. \Mac : Short for \begin{Ex}\object foo\end{Ex}. % % In each case: % 1. definition is delimited only by end-of-line. % 2. {}, () and [] are literal, with contents set in \MetaFont % 3. = and , are literal. % 4. `foo' is for optional arguments. % 5. is meta, as usual. \begingroup \catcode`\(=13 \catcode`\,=13 \catcode`\==13 \gdef\MacroDefCodes{% \@MD \catcode`\(13 \catcode`\^^M12 \catcode`\`13 \catcode`\,13 \catcode`\!1 \catcode`\@2 \def~{}% \def={{\fontshape{n}\selectfont\string=}}% \def,{{\fontshape{n}\selectfont\string,}}% \def(##1){\string({\MetaFont ##1})}} \endgroup \begingroup \catcode`\`=13 \gdef`#1'{{\OpArgFont #1}} \endgroup \begingroup \catcode`\^^M=12\relax% \gdef\GetMacroDef#1{\begingroup\MacroDefCodes\@GetMacroDef{#1}}% \gdef\@GetMacroDef#1#2^^M{#1{#2}\endgroup}% \endgroup % For listing macro definitions in a "description" environment: \def\mitem{\GetMacroDef\@mitem} \def\@mitem#1{% \item[{\MainFont\Main#1}]% \addtoquickref{object}{#1}% \leavevmode\par} % For listing graphics object definitions in a {description} environment: % The optional *[par] is inserted automatically. \def\oitem{\GetMacroDef\@oitem} \def\@oitem#1{\@@oitem#1\@nil} \def\@@oitem#1#2\@nil{\@mitem{#1{\OpArgFont*[{\MetaFont par}]}#2}} % For generic macro definition, usually to be put in a displayed env. \def\object{\GetMacroDef\@object} \def\@object#1{\addtoquickref{object}{#1}{\MainFont\Main#1\@@par}} % For a single displayed macro definition: \def\Mac{\GetMacroDef\@Mac} \def\@Mac#1{\begin{Ex}\@object{#1}\end{Ex}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%] %% INDEX: %% \def\PrintUserIndex{% \clearpage \columnsep=20pt \advance\oddsidemargin\sechang \advance\evensidemargin\sechang \advance\textwidth-\sechang \sechang=0pt \onecolumn \@input{\jobname.ind}} %%%%%%%%%%% FRAMED WARNINGS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newbox\bombbox \setbox\bombbox=\hbox to\z@{% \hss \rput[r](-1.5cm,0){% \psset{unit=7pt} \begin{pspicture}(-4,-4)(4,4) \pscircle[fillcolor=gray,fillstyle=solid]{4} \rput{45}{\scaleboxto(6,0){PS\kern-1pt}} \psellipse*(0,3.8)(1,.2) \psellipse*(0,5.5)(1,.2) \psframe*(-1,3.8)(1,5.5) \psbezier(0,5.5)(0,7)(1,8)(3.5,8) \multido{\r=-0+40}{9}{\rput{\r}(3.5,8){\psline(0,0)(.4,0)}} \end{pspicture}}} \def\Warning{% \trivlist\item[] \leavevmode\kern\@totalleftmargin \valign\bgroup% \vfil##\vfil\cr \copy\bombbox\cr \minipage{\textwidth} \quote \em Warning:\hskip 1em \ignorespaces} \def\endWarning{\endquote\endminipage\cr\egroup\endtrivlist} \newbox\filebox \setbox\filebox=\hbox{% \pspicture(-1,-.5)(1,.7) \pspolygon[linearc=2pt,shadow=true,shadowangle=45,xunit=1.1]% (-1,-.55)(-1,.5)(-.8,.5)(-.8,.65)(-.2,.65)(-.2,.5)(1,.5)(1,-.55) \endpspicture} \def\File#1{% \leavevmode \marginpar{% \leavevmode\lower 20pt\hbox{% \hbox to0pt{\hbox to \linewidth{\hss\copy\filebox\hss}\hss}% \raise 10pt\hbox to \linewidth{\hss\large\bf\sf #1\hss}}}% \ignorespaces} %%%%%%%%%%%%%%%%%%%% MISCELLANEOUS %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Driver notes: \def\drivers{\noindent\small Driver notes:\hskip 1em\ignorespaces} % This makes " a short verb. E.g., "\foo" instead of \verb+\foo+. \catcode`\"=\active \def"{\verb"} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %% END pst-user.sty