From ecf966f305f6aeff2bbdf42c82d8425921aa9eda Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 11 Jan 2006 23:03:17 +0000
Subject: source 1

git-svn-id: svn://tug.org/texlive/trunk@105 c570f23f-e606-0410-a88d-b1316a301751
---
 .../texmf-dist/source/latex/pst-poly/pst-poly.dtx  | 1679 ++++++++++++++++++++
 1 file changed, 1679 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/pst-poly/pst-poly.dtx

(limited to 'Master/texmf-dist/source/latex/pst-poly/pst-poly.dtx')

diff --git a/Master/texmf-dist/source/latex/pst-poly/pst-poly.dtx b/Master/texmf-dist/source/latex/pst-poly/pst-poly.dtx
new file mode 100644
index 00000000000..5b3d427240b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/pst-poly/pst-poly.dtx
@@ -0,0 +1,1679 @@
+% \iffalse meta-comment, etc.
+%%
+%% Package `pst-poly.dtx'
+%%
+%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr>
+%% Herbert Voss <voss _at_ pstricks.de>
+%%
+%% Novermber 20, 2004
+%%
+%% 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.
+%%
+%% DESCRIPTION:
+%%   `pst-poly' is a PSTricks package to draw easily various kinds of regular
+%%   or non regular polygons, with various customizations.
+%%
+% \fi
+%
+% \changes{v1.60}{2004/11/20}{new macro pspolygonbox, 
+%                             using pst-xkey}
+% \changes{v1.50}{2001/02/08}{Standard packaging (.ins + .dtx files).}
+% \changes{v1.40}{1998/07/09}{Define `PolyRotation' parameter as a real number
+%                            and not as an angle, to allow to use the macro
+%                            `degrees' before to draw a polygon.}
+% \changes{v1.30}{1998/02/06}{Rename `PsPicture' parameter to `PstPicture' for
+%                            consistancy.}
+% \changes{v1.20}{1997/06/27}{First public release.}
+%
+% \DoNotIndex{\\,\%,\@}
+% \DoNotIndex{\@eha,\@empty,\@ifnextchar,\@nameuse,\@nil,\@pstrickserr}
+% \DoNotIndex{\@tempdimb,\@undefined}
+% \DoNotIndex{\advance,\Alph,\begin,\begingroup,\Below@Example,\BS}
+% \DoNotIndex{\catcode,\CenterExample,\changes,\clearpage,\CodelineIndex}
+% \DoNotIndex{\colorbox,\csname}
+% \DoNotIndex{\def,\define@key,\degrees,\divide,\DocInput,\documentclass}
+% \DoNotIndex{\edef,\else,\EnableCrossrefs,\end,\endCenterExample}
+% \DoNotIndex{\endcsname,\endExample,\endgroup,\endinput,\endpspicture}
+% \DoNotIndex{\endSideBySideExample,\Example}
+% \DoNotIndex{\fboxsep,\fi,\filedate,\fileversion,\FV@Environment}
+% \DoNotIndex{\FV@UseKeyValues,\FV@XRightMargin,\FVB@Example,\fvset}
+% \DoNotIndex{\GetFileInfo}
+% \DoNotIndex{\hbadness,\hfuzz,\HLEmphasize,\HLMacro,\HLMacro@i}
+% \DoNotIndex{\HLReverse,\HLReverse@i,\hspace}
+% \DoNotIndex{\i,\if@star,\ifnum,\ifodd,\ifx,\input,\jobname}
+% \DoNotIndex{\let,\lineto,\makeatletter,\makeatother,\message,\moveto}
+% \DoNotIndex{\multido,\multidocount,\MultidoLoaded,\multiply}
+% \DoNotIndex{\n,\newbox,\newcommand,\newcounter,\newdimen,\newif}
+% \DoNotIndex{\OnlyDescription}
+% \DoNotIndex{\par,\parindent,\pnode,\providecommand,\ProvidesPackage}
+% \DoNotIndex{\pscurve,\pscustom,\psdots,\psline,\pspicture,\pspolygon}
+% \DoNotIndex{\psset,\pssetlength,\pst@cnta,\pst@getint,\pst@ifstar}
+% \DoNotIndex{\PstAtCode,\PSTricksLoaded,\psxunit,\psyunit}
+% \DoNotIndex{\RecordChanges,\relax,\rput}
+% \DoNotIndex{\savebox,\setcounter,\setlength,\shortstack}
+% \DoNotIndex{\SideBySide@Example,\SideBySideExample,\small,\solid@star}
+% \DoNotIndex{\space,\SpecialCoor,\Star,\symbol}
+% \DoNotIndex{\textbf,\textcolor,\textit,\texttt,\textwidth,\the,\topsep,\tw@}
+% \DoNotIndex{\usebox,\usepackage}
+% \DoNotIndex{\VerbatimEnvironment,\VerbatimInput,\vskip,\Z}
+%
+% \setcounter{IndexColumns}{2}
+%
+% \newcommand{\KeyValPackage}{`\textsf{keyval}'}
+% \newcommand{\PstPolygonPackage}{`\textsf{pst-poly}'}
+% \newcommand{\PstPolygonMacro}{\cs{PstPolygon}}
+% \newcommand{\PstPolygonNodeMacro}{\cs{PstPolygonNode}}
+% \newcommand{\XYpic}{%
+% \leavevmode\hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}-pic}}
+%
+% ^^A From ltugboat.cls
+%
+% ^^A Typeset the name of an environment
+% \providecommand\env[1]{\textsf{#1}}
+% \providecommand\clsname[1]{\textsf{#1}}
+% \providecommand\pkgname[1]{\textsf{#1}}
+% \providecommand\optname[1]{\textsf{#1}}
+% \providecommand\progname[1]{\textsf{#1}}
+%
+% ^^A A list of options for a package/class
+% \newenvironment{optlist}{\begin{description}%
+%   \renewcommand\makelabel[1]{%
+%     \descriptionlabel{\mdseries\optname{##1}}}%
+%   \itemsep0.25\itemsep}%
+%  {\end{description}}
+%
+% \makeatletter
+%
+% ^^A For the references
+% \newcommand\acro[1]{\textsc{#1}\@}
+% \def\CTAN{\acro{CTAN}}
+% \let\texttub\textsl
+% \def\TUB{\texttub{TUGboat}}
+%
+% ^^A From the `ctandir' package from the `ltugboat' package
+% ^^A (`ltubguid' on 1997/06/12)
+% ^^A Experimental CTAN location information macros for use with Donald
+% ^^A Arseneau's |url.sty|
+%
+% \newcommand\CTANdirectory[1]{\expandafter\urldef
+%   \csname CTAN@#1\endcsname\path}
+%
+% ^^A Use the standard label-referencing mechanism to get the warning for
+% ^^A an undefined label
+% \newcommand\CTANref[1]{\expandafter\@setref\csname CTAN@#1\endcsname
+%   \relax{#1}}
+%
+% ^^A Utility macros
+%
+% ^^A Example macros - adapted from the `fvrb-ex' package
+% ^^A ---------------------------------------------------
+%
+% ^^A Take care that we use here the four /?_Z characters as escape
+% ^^A characters, so we can't use these characters in the examples!
+%
+% ^^A To highlight some verbatim sequences (comments, macro names, etc.)
+% \def\HLEmphasize#1{\textit{#1}}
+% \newcommand{\BS}{\texttt{\symbol{`\\}}}
+% \def\HLMacro#1{\BS{}def\HLMacro@i#1\@nil}
+% \def\HLMacro@i#1def#2\@nil{\HLReverse{#2}}
+% \def\HLReverse#1{{\setlength{\fboxsep}{1pt}\HLReverse@i{#1}}}
+% \def\HLReverse@i#1{\colorbox{black}{\textcolor{white}{\textbf{#1}}}}
+%
+% \def\Example{\FV@Environment{}{Example}}
+% \def\endExample{%
+% \end{VerbatimOut}
+% \Below@Example{\input{\jobname.tmp}}
+% \endgroup}
+%
+% \def\CenterExample{\FV@Environment{}{Example}}
+% \def\endCenterExample{%
+% \end{VerbatimOut}
+% \begin{center}
+%   \Below@Example{\input{\jobname.tmp}}
+% \end{center}
+% \endgroup}
+%
+% \def\SideBySideExample{\FV@Environment{}{Example}}
+% \def\endSideBySideExample{%
+% \end{VerbatimOut}
+% \SideBySide@Example{\input{\jobname.tmp}}
+% \endgroup}
+%
+% \def\FVB@Example{%
+% \begingroup
+% \FV@UseKeyValues
+% \parindent=0pt
+% \multiply\topsep by 2
+% \VerbatimEnvironment
+% \begin{VerbatimOut}[gobble=4,codes={\catcode`\Z=12}]{\jobname.tmp}}
+%
+% \def\Below@Example#1{%
+% \VerbatimInput[gobble=0,commentchar=Z,commandchars=/?_,frame=single,
+%                numbers=left,numbersep=3pt]{\jobname.tmp}
+% \catcode`\%=14\relax
+% \catcode`\Z=9\relax
+% ^^A We suppress the effect of the highlighting macros
+% \catcode`/=0\relax
+% \catcode`?=1\relax
+% \catcode`_=2\relax
+% \def\HLEmphasize##1{##1}%
+% \def\HLMacro##1{##1}%
+% \def\HLReverse##1{##1}%
+% #1
+% \par}
+%
+% \def\SideBySide@Example#1{%
+% \vskip 1mm
+% \@tempdimb=\FV@XRightMargin
+% \advance\@tempdimb -5mm
+% \begin{minipage}[c]{\@tempdimb}
+%   \fvset{xrightmargin=0pt}
+%   \catcode`\%=14\relax
+%   \catcode`\Z=9\relax
+%   ^^A We suppress the effect of the highlighting macros
+%   \catcode`/=0\relax
+%   \catcode`?=1\relax
+%   \catcode`_=2\relax
+%   \def\HLEmphasize##1{##1}%
+%   \def\HLMacro##1{##1}%
+%   \def\HLReverse##1{##1}%
+%   #1
+% \end{minipage}%
+% \@tempdimb=\textwidth
+% \advance\@tempdimb -\FV@XRightMargin
+% \advance\@tempdimb 5mm
+% \begin{minipage}[c]{\@tempdimb}
+%   \VerbatimInput[gobble=0,commentchar=Z,commandchars=/?_,
+%                  frame=single,numbers=left,numbersep=3pt,
+%                  xleftmargin=5mm,xrightmargin=0pt]{\jobname.tmp}
+% \end{minipage}
+% \vskip 1mm}
+%
+% \makeatother
+%
+% ^^A End of example macros from `fvrb-ex'
+%
+% ^^A Define CTAN addresses using the commands of the |ctandir| package
+% \CTANdirectory{pstricks}{graphics/pstricks}
+% \CTANdirectory{xypic}{macros/generic/diagrams/xypic}
+%
+% ^^A For the possible index and changes log
+% \setlength{\columnseprule}{0.6pt}
+%
+% ^^A Beginning of the documentation itself
+%
+% \title{The \PstPolygonPackage{} package\\A PSTricks package for polygons}
+% \author{Denis \textsc{Girou}\thanks{CNRS/IDRIS ---
+%         Centre National de la Recherche Scientifique /
+%         Institut du D\'eveloppement et des Ressources en Informatique
+%         Scientifique --- Orsay --- France ---
+%         \mbox{\texttt{<Denis.Girou@idris.fr>}}.}}
+% \date{\today\\
+%       {\small Documentation revised November 20, 2004\\
+%        by Herbert Voss}}
+%
+% \maketitle
+%
+% \begin{abstract}
+%     This package allow to draw easily various kinds of regular or non
+%   regular polygons, using the unique macro \PstPolygonMacro, with various
+%   customization parameters.
+%
+%     It is also a good example of the great power and flexibility of
+%   PSTricks, as in fact it is a very short program (it body is only 100~lines
+%   long) but nevertheless really powerful.
+%
+%     And last, it is also a good pedagogical example of how to design and
+%   program \emph{high level graphic objects} above PSTricks own ones.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Introduction}
+%
+%   \PstPolygonPackage{} offer a unique macro (plus some aliases to define
+% some often used polygons) with few parameters to interact on it. But we can
+% also use all the relevant PSTricks parameters to change the size, the
+% characteristics of lines, to add filling, etc.
+%
+%   The polygons are always drawn counter clockwise.
+%
+% \vspace{1mm}
+%   The syntax is simply:
+% \fbox{\PstPolygonMacro\texttt{*[optional\_parameters]}}
+%
+% \vspace{1mm}
+%   As for PSTricks closed objects, the \texttt{*} version use a solid style
+% to fill the polygon, use the line color for fill color and set the linewidth
+% to 0.
+%
+%   A preliminary version, limited to \emph{regular} polygons, was shown at
+% TUG'95 conference, St Petersburg, Florida, as part of my talk
+% \emph{Building high level objects in PSTricks} \cite{Girou95}.
+%
+%   \emph{Note}: You can take advantage to look also at the polygon feature of
+% the \XYpic{} package \cite{XYpic}, \cite{LGC97}.
+%
+% \section{Usage}
+%
+% \subsection{Parameters}
+%
+%   There are \textbf{eight} specific parameters defined to change the way the
+% polygons are defined:
+%
+% \begin{optlist}
+%   \item [PstPicture (boolean)]: to define or not a \texttt{pspicture}
+%   environment for the polygon. We have to define this parameter to
+%   \emph{false} if we want to mix the polygon with other PSTricks objects
+%   --- see examples later
+%   (\emph{Default:~true} --- which is not the case for basic PSTricks
+%   objects).
+% \end{optlist}
+%
+% \begin{optlist}
+%   \item [PolyRotation (real)]: rotation angle applied to the polygon
+%   (\emph{Default:~0} --- no rotation).
+% \end{optlist}
+%
+% \begin{CenterExample}
+%   \PstPolygon\hfill
+%   \PstPolygon[/HLEmphasize?PolyRotation_=/HLReverse?18_]\hfill
+%   \PstPolygon[/HLEmphasize?PolyRotation_=/HLReverse?36_]\hfill
+%   \PstPolygon[/HLEmphasize?PolyRotation_=/HLReverse?45_]
+% \end{CenterExample}
+%
+% \begin{optlist}
+%   \item [PolyNbSides (integer)]: number of sides of the polygon
+%   (\emph{Default:~5}).
+% \end{optlist}
+%
+% \begin{CenterExample}
+%   \PstPolygon
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?3_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?4_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?5_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?8_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?50_]
+% \end{CenterExample}
+%
+% \begin{optlist}
+%   \item [PolyOffset (integer)]: number of nodes to bypass to obtain each
+%   time the next one
+%   (\emph{Default:~1} --- no node bypassed).
+% \end{optlist}
+%
+% \begin{CenterExample}
+%   \PstPolygon
+%   \PstPolygon[/HLEmphasize?PolyOffset_=/HLReverse?2_]
+%   \PstPolygon[/HLEmphasize?PolyOffset_=/HLReverse?3_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?7_,/HLEmphasize?PolyOffset_=/HLReverse?2_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?9_,/HLEmphasize?PolyOffset_=/HLReverse?4_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?17_,/HLEmphasize?PolyOffset_=/HLReverse?6_]
+% \end{CenterExample}
+%
+% \begin{optlist}
+%   \item [PolyIntermediatePoint (real)]: position of the intermediate point
+%   used to join each time the next node
+%   (\emph{Default:~empty} --- not used).
+% \end{optlist}
+%
+% \begin{CenterExample}
+%   \PstPolygon
+%   \PstPolygon[/HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.38_]
+%   \PstPolygon[/HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.2_]
+%   \PstPolygon[/HLEmphasize?PolyIntermediatePoint_=/HLReverse?1.2_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?7_,/HLEmphasize?PolyOffset_=/HLReverse?2_,
+%               /HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.38_]
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?21_,/HLEmphasize?PolyOffset_=/HLReverse?2_,
+%               /HLEmphasize?PolyIntermediatePoint_=/HLReverse?-1.25_]
+% \end{CenterExample}
+%
+% \begin{optlist}
+%   \item [PolyCurves (boolean)]: boolean value to choose between straight
+%   line and curve to join each time the next node
+%   (\emph{Default:~false} --- straight lines).
+% \end{optlist}
+%
+% \begin{CenterExample}
+%   \psset{/HLEmphasize?PolyCurves_=/HLReverse?true_}
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?7_,/HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.38_]\hfill
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?11_,/HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.6_]\hfill
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?7_,/HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.2_,
+%               /HLEmphasize?PolyOffset_=/HLReverse?2_]\hfill
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?9_,/HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.1_]\hfill
+%   \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?15_,/HLEmphasize?PolyIntermediatePoint_=/HLReverse?1.2_]
+% \end{CenterExample}
+%
+% \begin{optlist}
+%   \item [PolyEpicycloid (boolean)]: boolean value to choose between
+%   polygon and epicycloid
+%   (\emph{Default:~false} --- polygon).
+% \end{optlist}
+%
+% \begin{CenterExample}
+%   \psset{linewidth=0.001,/HLEmphasize?PolyNbSides_=/HLReverse?72_,/HLEmphasize?PolyEpicycloid_=/HLReverse?true_}
+%   % /HLEmphasize?Epicycloid of factor 1 is cardioid and of factor 2 nephroid_
+%   \multido{\i=2+1}{4}{\PstPolygon[/HLEmphasize?PolyOffset_=/HLReverse?\i_]\hfill}
+%   \PstPolygon[/HLEmphasize?PolyOffset_=/HLReverse?72_]\hfill % /HLEmphasize?Epicycloid of factor 71_
+%   \PstPolygon[/HLEmphasize?PolyOffset_=/HLReverse?73_]       % /HLEmphasize?Epicycloid of factor 72_
+% \end{CenterExample}
+%
+% \begin{optlist}
+%   \item [PolyName (string)]: name of the polygon, useful to have different
+%   names for the nodes of different polygons
+%   (\emph{Default:~empty} --- no name).
+% \end{optlist}
+%
+%   The center of the polygon has name \texttt{PolyName0} and the nodes
+% (vertices) have names \texttt{PolyName1} to \texttt{PolyNameN}.
+%
+%   With this parameter, we can connect as we want nodes of different polygons:
+%
+% \begin{SideBySideExample}[xrightmargin=3cm]
+%   \psset{PstPicture=false}
+%   \begin{pspicture}(-1,-1)(1,1)
+%     \PstPolygon[unit=0.8,/HLEmphasize?PolyName_=/HLReverse?A_,/HLEmphasize?PolyNbSides_=/HLReverse?6_]
+%     \PstPolygon[unit=1.2,/HLEmphasize?PolyName_=/HLReverse?B_,/HLEmphasize?PolyNbSides_=/HLReverse?12_]
+%   \end{pspicture}
+%   \multido{\i=1+2}{6}{%
+%     \ncline{A\the\multidocount}{B\i}}
+% \end{SideBySideExample}
+%
+%   It is also a way (limited in fact...) to define three dimensional objects
+% in perspective (this was used first in \cite{XYpic}):
+%
+% \begin{SideBySideExample}[xrightmargin=3cm]
+%   \psset{unit=0.8}
+%   \begin{pspicture}(3,2.5)
+%     % /HLEmphasize?\PstSquare is described later_
+%     \rput[lb](0,0){\PstSquare[/HLEmphasize?PolyName_=/HLReverse?A_]}
+%     \rput[lb](2.5,2){\PstSquare[unit=0.5,
+%                                 /HLEmphasize?PolyName_=/HLReverse?B_]}
+%     \multido{\i=1+1}{4}{\ncline{A\i}{B\i}}
+%   \end{pspicture}
+% \end{SideBySideExample}
+%
+%   Of course, we can mix specific \PstPolygonPackage{} parameters with
+% relevant PSTricks ones and combine it with other generic macros
+% (for repetitions, projection in the 3d space, etc.)
+%
+% \begin{CenterExample}
+%   \PstPolygon[unit=/HLReverse?1.5_,linestyle=/HLReverse?dashed_]
+%   \PstPolygon[linewidth=/HLReverse?1mm_]
+%   \PstPolygon[fillstyle=/HLReverse?crosshatch_,/HLEmphasize?PolyNbSides_=/HLReverse?6_]
+%   \PstPolygon[linecolor=/HLReverse?red_,fillstyle=/HLReverse?solid_,fillcolor=/HLReverse?yellow_,
+%               /HLEmphasize?PolyRotation_=/HLReverse?18_,/HLEmphasize?PolyOffset_=/HLReverse?2_]
+%   \PstPolygon*[linecolor=/HLReverse?cyan_,/HLEmphasize?PolyNbSides_=/HLReverse?7_,/HLEmphasize?PolyOffset_=/HLReverse?2_]
+% \end{CenterExample}
+%
+% \begin{CenterExample}
+%   \multido{\i=5+2}{6}{%
+%     \PstPolygon[/HLEmphasize?PolyNbSides_=/HLReverse?\i_,/HLEmphasize?PolyCurves_=/HLReverse?true_,
+%                 /HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.1_,/HLEmphasize?PolyOffset_=/HLReverse?3_]}
+% \end{CenterExample}
+%
+% \subsection{Pre-defined polygons}
+%
+%   Some often used polygons and other related geometric objects are
+% pre-defined, for immediate usage :
+%
+% \begin{CenterExample}
+%   \PstTriangle
+%   \PstSquare
+%   \PstPentagon[unit=0.5,linestyle=dotted]
+%   \PstHexagon[fillstyle=hlines,hatchangle=90]
+%   \PstHeptagon[fillstyle=vlines]
+%   \PstOctogon*[unit=0.8,linecolor=red]
+%   \PstNonagon[unit=0.5]
+%   \PstDecagon
+%   \PstDodecagon[linecolor=green]
+%   \PstStarFiveLines
+%   \PstStarFive
+% \end{CenterExample}
+%
+% \subsection{Non regular polygons}
+%
+%   Until now, we have described only the so-called \emph{regular} polygons,
+% which are from far the most useful ones (all of them have equal edges and
+% angles). Nevertheless, it is not so difficult to extend these polygon to
+% \emph{non regular} ones, using a different value for horizontal and vertical
+% units (nevertheless, the code is more tricky, as we must do all the
+% trigonometry explicitely...)
+%
+% \begin{CenterExample}
+%   \PstPentagon[xunit=/HLReverse?0.5_]\hfill
+%   \PstHexagon[yunit=/HLReverse?0.5_]\hfill
+%   \PstStarFive[xunit=/HLReverse?0.5_,yunit=/HLReverse?1.5_]\hfill
+%   \PstPolygon[xunit=/HLReverse?0.8_,yunit=/HLReverse?1.5_,/HLEmphasize?PolyNbSides_=/HLReverse?9_,/HLEmphasize?PolyOffset_=/HLReverse?2_,
+%               /HLEmphasize?PolyIntermediatePoint_=/HLReverse?0.1_,/HLEmphasize?PolyCurves_=/HLReverse?true_]
+% \end{CenterExample}
+%
+% \subsection{Nodes (vertices)}
+%
+%   And another powerful possibility is to define a command
+% \PstPolygonNodeMacro{} which will be excuted at each node
+% (\emph{Default:~empty} --- nothing executed). The counter name for nodes is
+% \cs{INode}, starting from 0. The \cs{multidocount} counter, from the
+% \cs{multido} command, start itself from 1.
+%
+% \begin{SideBySideExample}[xrightmargin=3cm]
+%   \providecommand{\PstPolygonNode}{%
+%     /HLReverse?\psdots[dotsize=0.2,linecolor=cyan](1;\INode)_}
+%   \PstPentagon
+% \end{SideBySideExample}
+%
+% \begin{SideBySideExample}[xrightmargin=3cm]
+%   \newcounter{Letter}
+%   \providecommand{\PstPolygonNode}{%
+%     /HLReverse?\setcounter{Letter}{\the\multidocount}_%
+%     /HLReverse?\rput*{*0}(1;\INode){\small\Alph{Letter}}_}
+%   \PstHeptagon[PolyOffset=3]
+% \end{SideBySideExample}
+%
+% \begin{SideBySideExample}[xrightmargin=3cm]
+%   \providecommand{\PstPolygonNode}{%
+%     /HLReverse?\psdots[dotstyle=o,dotsize=0.2](1;\INode)_
+%     /HLReverse?\psline[linecolor=red]{->}(0.9;\INode)_}
+%   \PstPolygon[PolyNbSides=8]
+% \end{SideBySideExample}
+%
+% \vspace{3mm}
+%   It is also a way to nest polygons:
+% \vspace{3mm}
+%
+% \begin{SideBySideExample}[xrightmargin=3cm]
+%   \newbox{\Star}
+%   \savebox{\Star}{%
+%     \PstStarFive*[unit=0.15,linecolor=red]}
+%   \providecommand{\PstPolygonNode}{%
+%     /HLReverse?\rput{*0}(1;\INode){\usebox{\Star}}_}
+%   \shortstack{\PstNonagon\\[5mm]
+%               \PstDodecagon[linestyle=none]}
+% \end{SideBySideExample}
+%
+% \vspace{3mm}
+%   Here we redraw one of the polygon examples built with the \XYpic{} package
+% in \cite[example 5-5-34, page 203]{LGC97}:
+%
+% \begin{CenterExample}
+%   \psset{unit=2,PstPicture=false}
+%   \begin{pspicture}(-1.6,-1.6)(1.6,1.6)
+%     % /HLEmphasize?Just to name the nodes, to be able to join some of them._
+%     % /HLEmphasize?by solid curves. We can't draw the polygons now,_
+%     % /HLEmphasize?as the node numbers must erase the solid curves..._
+%     \PstHexagon[unit=0.8,linestyle=none,PolyName=H]
+%     \PstDodecagon[unit=1.2,linestyle=none,PolyName=D]
+%     {\SpecialCoor
+%      \psset{linewidth=0.4pt,border=2pt,nodesep=0.45}
+%      \psccurve(H1)(H4)(D8)([angle=-30]D9)(D11)
+%      \psccurve(D3)(H3)(H6)(D12)([angle=90]D1)
+%      \psccurve(D4)(H2)(H5)(D7)([angle=90]D6)}
+%     \psset{linestyle=dotted,framesep=1pt}
+%     \PstTriangle[unit=0.23]
+%     \providecommand{\PstPolygonNode}{%
+%       \rput*{*0}(1;\INode){\small\the\multidocount}}
+%     \PstHexagon[unit=0.8]
+%     \PstDodecagon[unit=1.2]
+%     \PstDodecagon[unit=1.6]
+%   \end{pspicture}
+% \end{CenterExample}
+%
+% \section[Polygonbox]{Polygonbox\protect\footnote{written by Herbert Vo\ss.}}
+% The valid options with the predefined values are
+% \begin{verbatim}
+%  PolyNbSides =3
+%  PolyRotation=0
+% \end{verbatim}
+%
+% \begin{itemize}
+% \item There are some problems with linearcs and rounding errors, which are seen in the
+% following examples for \verb+PolyNbSides=7+. 
+% \item To rotate the text inside the box, one can use the \verb+\rotatebox+ macro from
+%       the \verb+rotating+ package (see examples).
+% \end{itemize}
+%
+% \begin{CenterExample}
+%   \multido{\nA=3+1}{8}{%
+%      \pspolygonbox[PolyNbSides=\nA,framesep=3mm]{Text}~}
+% \end{CenterExample}
+%
+% \begin{CenterExample}
+%    \multido{\nA=3+1}{8}{\pspolygonbox[PolyNbSides=\nA,%
+%         framesep=2mm,doubleline=true]{Text}~}
+% \end{CenterExample}
+%
+%
+% \begin{CenterExample}
+%   \psset{PolyNbSides=4}
+%   \multido{\nA=0+60}{8}{\pspolygonbox[PolyRotation=\nA,%
+%       framesep=2mm,doubleline=true,%
+%       linecolor=red,doublecolor=blue]{\magenta Text}~}
+% \end{CenterExample}
+%
+% \begin{CenterExample}
+%   \multido{\nA=0+60,\nB=45+60}{8}{\pspolygonbox%
+%      [PolyRotation=\nA,framesep=2mm,doubleline=true,%
+%        linecolor=red,doublecolor=blue,linearc=0.4]%
+%        {\rotatebox{\nB}{\blue Text}}~}\\[1cm]
+% \end{CenterExample}
+%
+% \begin{CenterExample}
+%   \multido{\nA=3+1}{8}{%
+%     \pspolygonbox[PolyNbSides=\nA,rot=60,framesep=2pt,%
+%       doubleline=true,linearc=0.2]{Text}~}
+% \end{CenterExample}
+%
+% \begin{CenterExample}
+%   \multido{\nA=3+1}{8}{%
+%      \pspolygonbox[PolyNbSides=\nA,framesep=10pt,%
+%      fillstyle=solid,fillcolor=cyan,linearc=0.2]{Text}~}
+% \end{CenterExample}
+%
+% \begin{CenterExample}
+%   \multido{\nA=-5+5}{8}{\pspolygonbox[framesep=\nA pt,%
+%      PolyRotation=90]{\Huge\red T}~}
+% \end{CenterExample}
+%
+%
+% \begin{CenterExample}
+%   \multido{\nA=-5+5}{8}{\pspolygonbox[framesep=\nA pt,%
+%      PolyRotation=90,boxsep=false]{\Huge\red T}~}
+% \end{CenterExample}
+%
+%
+% ^^A Bibliography
+% \begin{thebibliography}{9}
+% \bibitem{Girou94} Denis Girou, Pr\'esentation de PSTricks,
+%                   \emph{Cahiers GUTenberg}, Number~16, pages 21--70,
+%                   February~1994 (in french).
+%
+% \bibitem{Girou95} Denis Girou, Building high level objects in PSTricks,
+%                   TUG'95, St Petersburg, Florida, 1995. Available at
+% {\url{http://www.tug.org/applications/PSTricks/TUG95-PSTricks_4.ps.gz}}
+%
+% \bibitem{LGC97} Michel Goossens, Sebastian Rahtz and Frank Mittelbach,
+%                 \emph{The \LaTeX{} Graphics Companion}, Addison-Wesley, 1997.
+%
+% \bibitem{Hoenig98} Alan Hoenig, \emph{\TeX{} Unbound: \LaTeX{} \& \TeX{}
+%                    Strategies, Fonts, Graphics, and More},
+%                    Oxford University Press, 1998.
+%
+% \bibitem{voss04} Herbert Vo\ss, PSTricks -- Grafik mit {P}ost{S}cript f\"ur \TeX{}
+%                    und \LaTeX{}, Lehmanns, July 2004 (in german).
+%		    
+% \bibitem{XYpic} Kristoffer~H. Rose and Ross Moore, \XYpic. Polygon feature,
+%                 available from \CTAN, 1991-1998, \CTANref{xypic}.
+%
+% \bibitem{vanZandt93} Timothy van Zandt, PSTricks. PostScript macros for
+%                      Generic \TeX, available from \CTAN, 1993,
+%                      \CTANref{pstricks}.
+%
+% \bibitem{vanZandtGirou94} Timothy van Zandt and Denis Girou, Inside PSTricks,
+%                           \emph{\TUB}, Volume~15, Number~3, pages 239--246,
+%                           September 1994.
+% \end{thebibliography}
+%
+%
+% \StopEventually{}
+%
+% ^^A .................... End of the documentation part ....................
+%
+% \section{Driver file}
+%
+%   The next bit of code contains the documentation driver file for \TeX{},
+% i.e., the file that will produce the documentation you are currently
+% reading. It will be extracted from this file by the \texttt{docstrip}
+% program.
+%
+%    \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+\GetFileInfo{pst-poly.dtx}
+\usepackage{fancyvrb}
+\usepackage{pstricks}
+\usepackage{pst-poly}
+\usepackage{rotating}
+\usepackage{url}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\OnlyDescription          % Comment it for implementation details
+\hbadness=7000            % Over and under full box warnings
+\hfuzz=3pt
+\begin{document}
+  \DocInput{pst-poly.dtx}
+\end{document}
+%</driver>
+%    \end{macrocode}
+%
+% \section{\PstPolygonPackage{} \LaTeX{} wrapper}
+%
+%    \begin{macrocode}
+%<*latex-wrapper>
+\RequirePackage{pstricks}
+\ProvidesPackage{pst-poly}[2004/11/20 package wrapper for 
+  pst-poly.tex (hv)]
+\input{pst-poly.tex}
+\ProvidesFile{pst-poly.tex}
+  [\filedate\space v\fileversion\space `PST-poly' (DG)]
+%</latex-wrapper>
+%    \end{macrocode}
+%
+% \section{\PstPolygonPackage{} code}
+%
+%   As it is a general and very powerful way to build \emph{high level graphic
+% objects} above PSTricks own ones, we will comment precisely the code,
+% focusing these comments on the case of \emph{regular} polygons, which is
+% enough to show all useful major technics. In fact, all real difficulties
+% in the code of \PstPolygonPackage{} are for the \emph{non regular} case,
+% which involve some trigonometry.
+%
+%    \begin{macrocode}
+%<*pst-poly>
+%    \end{macrocode}
+%
+% \subsection{Preambule}
+%
+%   Who we are.
+%
+%    \begin{macrocode}
+%
+\def\fileversion{1.60}
+\def\filedate{2004/11/20}
+\message{`PST-Polygon' v\fileversion, \filedate\space (DG/hv)}
+\csname PSTPolygonLoaded\endcsname
+\let\PSTPolygonLoaded\endinput
+%
+%    \end{macrocode}
+%
+%   Require the PSTricks, `\textsf{pst-node}' and `\textsf{multido}' packages.
+%
+%    \begin{macrocode}
+%
+\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
+\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
+\ifx\MultidoLoaded\endinput\else\input multido.tex\fi
+%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi
+%    \end{macrocode}
+%
+%   Catcodes changes.
+%
+%    \begin{macrocode}
+%
+\edef\PstAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+\pst@addfams{pst-poly}
+%
+%    \end{macrocode}
+%
+% \subsection{Definition of the parameters}
+%
+%   \texttt{PstPicture} will define if the polygon must be set inside a
+% \texttt{pspicture} environment or not. It is a \emph{boolean} value, so we
+% define a new \cs{if} \TeX{} variable. The \texttt{true} value specified
+% will give the default to used when no value is affected to this parameter
+% (so \texttt{PstPicture} will be equivalent to \texttt{PstPicture=true}).
+% Take care that it is not the default value for the parameter itself (we
+% will see later that here we choose \texttt{false} as default value...).
+% We don't prefix this parameter name by \texttt{Poly} because it is not
+% specific to polygons. Note also that \texttt{psset} is for the
+% \KeyValPackage{} package the generic name for all PSTricks parameters.
+%
+%    \begin{macrocode}
+\newif\ifPst@PstPicture
+\define@key[psset]{pst-poly}{PstPicture}[true]{\@nameuse{Pst@PstPicture#1}}
+%    \end{macrocode}
+%
+%   \texttt{PolyRotation} will be the rotation angle to apply to the
+% polygon. It is a \emph{real} value used as an \emph{angle}.
+%
+%    \begin{macrocode}
+\define@key[psset]{pst-poly}{PolyRotation}{\edef\PstPoly@Rotation{#1}}
+%    \end{macrocode}
+%
+%   \texttt{PolyNbSides} will be the number of sides (edges) of the polygon.
+% It is an \emph{integer} value and we store it into a \TeX{} macro (in this
+% way, we can define a lot of integer parameters without having the risk to
+% exhaust \TeX{} limitations of numbers of counters).
+%
+%    \begin{macrocode}
+\define@key[psset]{pst-poly}{PolyNbSides}{\pst@getint{#1}{\PstPoly@NbSides}}
+%    \end{macrocode}
+%
+%   \texttt{PolyOffset} will be the offset to obtain the next vertice to
+% connect, for each one of the polygon. It is an \emph{integer} value.
+%
+%    \begin{macrocode}
+\define@key[psset]{pst-poly}{PolyOffset}{\pst@getint{#1}{\PstPoly@Offset}}
+%    \end{macrocode}
+%
+%   \texttt{PolyIntermediatePoint} will be the position of an intermediate
+% point to used between the current vertice and the next one, for each edge.
+% It will defined a \emph{relative} position, which will be the same for
+% each edge. As it is a \emph{real} value on which we will have to make some
+% computations, we use here a dimension register.
+%
+%    \begin{macrocode}
+\newdimen\PstPoly@IntermediatePointDim
+\define@key[psset]{pst-poly}{PolyIntermediatePoint}{\edef\PstPoly@IntermediatePoint{#1}}
+%    \end{macrocode}
+%
+%   \texttt{PolyName} will be the name assigned to the polygon, which will be
+% useful if we would like to connect edges of different polygons. It is a
+% \texttt{string} that we store in a macro.
+%
+%    \begin{macrocode}
+\define@key[psset]{pst-poly}{PolyName}{\edef\PstPoly@Name{#1}}
+%    \end{macrocode}
+%
+%   \texttt{PolyCurves} will define if the edges are lines or curves. It is a
+% \emph{boolean value}. And logically, there will be no effect of it if there
+% is no intermediate point defined.
+%
+%    \begin{macrocode}
+\newif\ifPstPoly@Curves
+\define@key[psset]{pst-poly}{PolyCurves}[true]{\@nameuse{PstPoly@Curves#1}}
+%    \end{macrocode}
+%
+%   \texttt{PolyEpicycloid} will define if we will draw a polygon or an
+% epicycloid (which is of course not a polygon, but this was a functionality
+% very easy to add to this package!) It is a \emph{boolean} value.
+%
+%    \begin{macrocode}
+\newif\ifPstPoly@Epicycloid
+\define@key[psset]{pst-poly}{PolyEpicycloid}[true]{\@nameuse{PstPoly@Epicycloid#1}}
+%    \end{macrocode}
+%
+%   Next, we set the default values for all these new parameters.
+% We choose to have no rotation, five sides, no offset (so a value of 1),
+% no intermediate point, no name, connections by lines (so no curved ones)
+% and polygons (so no epicycloids).
+%
+%    \begin{macrocode}
+\psset{%
+  PstPicture=true,PolyRotation=0,PolyNbSides=5,PolyOffset=1,
+  PolyIntermediatePoint=,PolyName=,PolyCurves=false,PolyEpicycloid=false}
+%
+%    \end{macrocode}
+%
+% \subsection{Main macro}
+%
+%   The general \cs{PstPolygon} macro to draw polygons.
+%
+%    First we look if the \texttt{*} convention is used, as for many PSTricks
+% macros, to fill the graphic object using the current color of the line.
+%
+% \begin{macro}{\PstPolygon}
+%    \begin{macrocode}
+%
+\def\PstPolygon{\pst@ifstar{\@ifnextchar[{\PstPolygon@i}{\PstPolygon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Then we define the auxiliary macro which will handle the parameters if
+% some are used. Note also the usage of the double \verb+{{+ to have only
+% changes of parameter values for this specific object, as redefinitions
+% of them must be local.
+%
+% \begin{macro}{\PstPolygon@i}
+%    \begin{macrocode}
+\def\PstPolygon@i[#1]{{%
+%    \end{macrocode}
+%
+%   After that, we can set the values of local parameters if defined and
+% take account of the \texttt{*} convention if used.
+%
+%    \begin{macrocode}
+\psset{#1}%
+\if@star\solid@star\fi
+%    \end{macrocode}
+%
+%   For security, we make some checks on the validity of the parameters.
+%
+%    \begin{macrocode}
+\ifnum\PstPoly@NbSides<3
+  \@pstrickserr{PolyNbSides must be greater than 2
+                (and not `\PstPoly@NbSides')}{\@eha}%
+\fi
+\ifnum\PstPoly@NbSides>200
+  \@pstrickserr{PolyNbSides must be less than 201
+                (and not `\PstPoly@NbSides')}{\@eha}%
+\fi
+\ifnum\PstPoly@Offset<1
+  \@pstrickserr{PolyOffset must be greater than 0
+                (and not `\PstPoly@Offset')}{\@eha}%
+\fi
+%    \end{macrocode}
+%
+%   And now, we can start the \emph{real} code. First we affect a special
+% value for the case where an offset will be used. There are only two cases,
+% as the offset can be \emph{odd} or \emph{even}.
+%
+%    \begin{macrocode}
+\ifodd\PstPoly@Offset
+  \def\PstPoly@Decimal{.5}%
+\else
+  \def\PstPoly@Decimal{}%
+\fi
+%    \end{macrocode}
+%
+%   We must say to use non cartesian coordinates (we will used polar ones
+% --- and special ones computed by trigonometry and defined in PostScript
+% for \emph{non} regular polygons).
+%
+%    \begin{macrocode}
+%
+\SpecialCoor
+%    \end{macrocode}
+%
+%   We look at the definition of a ``\texttt{pspicture}'' environment or not.
+%
+%    \begin{macrocode}
+\ifPst@PstPicture\pspicture(-1,-1)(1,1)\fi
+%    \end{macrocode}
+%
+%   We rotate the polygon if necessary (if not, we will use a rotation of
+% angle 0, which will have of course no effect).
+%
+%    \begin{macrocode}
+\rput{\PstPoly@Rotation}(0,0){%
+%    \end{macrocode}
+%
+%   We will used polar coordinates, with a unit given by the number of sides
+% of the polygon.
+%
+%    \begin{macrocode}
+  \degrees[\PstPoly@NbSides]
+%    \end{macrocode}
+%
+%   We must recompute it here if the unit has changed after assignation
+% (for instance \verb+\psset{PolyIntermediatePoint=0.38}\PstPolygon[unit=2]+)
+%
+%    \begin{macrocode}
+  \pssetlength{\PstPoly@IntermediatePointDim}{\PstPoly@IntermediatePoint}
+%    \end{macrocode}
+%
+%   If there is a name for this polygon, we assign this name followed by 0
+% to the center of it, and different names to all vertices, indexed by the
+% number of the vertice.
+%
+%    \begin{macrocode}
+  \ifx\PstPoly@Name\@empty
+  \else
+    \pnode(0,0){\PstPoly@Name 0}
+    \ifnum\psxunit=\psyunit
+      \def\PstPoly@Node{\pnode(1;\i)}%
+    \else
+      \def\PstPoly@Node{%
+        \pnode(! \i\space 360 \PstPoly@NbSides\space div mul cos
+                 \i\space 360 \PstPoly@NbSides\space div mul sin)}%
+    \fi
+    \multido{\i=0+1}{\PstPoly@NbSides}{%
+      \PstPoly@Node{\PstPoly@Name\the\multidocount}}
+  \fi
+%    \end{macrocode}
+%
+%   Now we are ready to draw the polygon. We use a \cs{pscustom} environment.
+%
+%    \begin{macrocode}
+  \pscustom{%
+%    \end{macrocode}
+%
+%   First, the case of epicycloids. We must only join each vertice to the
+% opposite one, using the defined offset as gap.
+%
+%    \begin{macrocode}
+    \ifPstPoly@Epicycloid
+      \pst@cnta=\PstPoly@NbSides
+      \divide\pst@cnta\tw@
+      \multido{\i=0+1}{\PstPoly@NbSides}{%
+        \moveto(1;\i)
+        \lineto(1;\the\pst@cnta)
+        \advance\pst@cnta\PstPoly@Offset}
+%    \end{macrocode}
+%
+%   Now, we can see the case of polygons. First, we move to the starting point.
+%
+%    \begin{macrocode}
+    \else
+      \ifnum\psxunit=\psyunit
+        \moveto(1,0)
+      \else
+        \moveto(! 1 0)
+      \fi
+%    \end{macrocode}
+%
+%   If there is no intermediate point, we must only have a loop to join all
+% vertices, according to the number of edges. And we use each time the
+% defined value of the offset to obtain the next vertice.
+%
+%    \begin{macrocode}
+      \ifx\PstPoly@IntermediatePoint\@empty
+        \ifnum\psxunit=\psyunit
+          \def\PstPoly@Junction{\lineto(1;\i)}%
+        \else
+          \def\PstPoly@Junction{\lineto%
+            (! \i\space 360 \PstPoly@NbSides\space div mul cos
+               \i\space 360 \PstPoly@NbSides\space div mul sin)}%
+        \fi
+        \multido{\i=\PstPoly@Offset+\PstPoly@Offset}{\PstPoly@NbSides}{%
+          \PstPoly@Junction}
+%    \end{macrocode}
+%
+%   If there is an intermediate point, first we see if vertices will be joined
+% by lines or curves.
+%
+%    \begin{macrocode}
+      \else
+        \ifPstPoly@Curves
+          \let\PstPoly@JunctionType\pscurve
+        \else
+          \let\PstPoly@JunctionType\psline
+        \fi
+        \ifnum\psxunit=\psyunit
+          \def\PstPoly@Junction{\PstPoly@JunctionType%
+            (\PstPoly@IntermediatePointDim;\the\pst@cnta\PstPoly@Decimal)
+            (1;\i)}%
+        \else
+          \def\PstPoly@Junction{\PstPoly@JunctionType%
+            (! \PstPoly@IntermediatePoint\space
+                 \the\pst@cnta\PstPoly@Decimal\space 360
+                   \PstPoly@NbSides\space div mul cos mul
+               \PstPoly@IntermediatePoint\space
+                 \the\pst@cnta\PstPoly@Decimal\space 360
+                   \PstPoly@NbSides\space div mul sin mul)
+            (! \i\space 360 \PstPoly@NbSides\space div mul cos
+               \i\space 360 \PstPoly@NbSides\space div mul sin)}%
+        \fi
+%    \end{macrocode}
+%
+%   We compute half of the value of the offset. We use a counter for that,
+% which is an integer, so we will add the value of the \cs{PstPoly@Decimal}
+% macro defined above, which has value 0.5 if the offset is an odd number.
+%
+%    \begin{macrocode}
+        \pst@cnta=\PstPoly@Offset
+        \divide\pst@cnta\tw@
+%    \end{macrocode}
+%
+%   Now, we can execute the main loop: for each vertice we join the current
+% one to the next, using each time the intermediate point defined.
+%
+%    \begin{macrocode}
+        \multido{\i=\PstPoly@Offset+\PstPoly@Offset}{\PstPoly@NbSides}{%
+          \PstPoly@Junction
+          \advance\pst@cnta\PstPoly@Offset}
+%    \end{macrocode}
+%
+%   Now, we can close the opened \emph{if} structures and the
+% \texttt{pscustom} environment.
+%
+%    \begin{macrocode}
+      \fi
+    \fi}
+%    \end{macrocode}
+%
+%   In the case where there is a special macro of name \cs{PstPolygonNode}
+% defined, we execute it at each node, and we close the rotation command.
+% The counter used is \cs{INode}.
+%
+%    \begin{macrocode}
+  \ifx\PstPolygonNode\@undefined
+  \else
+    \multido{\INode=\z@+\PstPoly@Offset}{\PstPoly@NbSides}{%
+      \PstPolygonNode}
+  \fi}
+%    \end{macrocode}
+%
+%   Then we close the ``\texttt{pspicture}'' environment, if defined,
+% and the \cs{PstPolygon@i} macro.
+%
+%    \begin{macrocode}
+\ifPst@PstPicture
+  \endpspicture
+\fi}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Pre-defined polygons}
+%
+%   Triangle (three sides).
+%
+% \begin{macro}{\PstTriangle}
+%    \begin{macrocode}
+\def\PstTriangle{%
+\pst@ifstar{\@ifnextchar[{\PstTriangle@i}{\PstTriangle@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstTriangle@i}
+%    \begin{macrocode}
+\def\PstTriangle@i[#1]{{%
+\psset{PolyNbSides=3,PolyRotation=90}% For triangle (360/3*(3/4))
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Square (four sides).
+%
+% \begin{macro}{\PstSquare}
+%    \begin{macrocode}
+\def\PstSquare{%
+\pst@ifstar{\@ifnextchar[{\PstSquare@i}{\PstSquare@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstSquare@i}
+%    \begin{macrocode}
+\def\PstSquare@i[#1]{{%
+\psset{PolyNbSides=4,PolyRotation=45}% For square (360/4/2)
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Pentagon (five sides).
+%
+% \begin{macro}{\PstPentagon}
+%    \begin{macrocode}
+\def\PstPentagon{%
+\pst@ifstar{\@ifnextchar[{\PstPentagon@i}{\PstPentagon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstPentagon@i}
+%    \begin{macrocode}
+\def\PstPentagon@i[#1]{{%
+\psset{PolyNbSides=5,PolyRotation=18}% For pentagon (360/5/4)
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Hexagon (six sides).
+%
+% \begin{macro}{\PstHexagon}
+%    \begin{macrocode}
+\def\PstHexagon{%
+\pst@ifstar{\@ifnextchar[{\PstHexagon@i}{\PstHexagon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstHexagon@i}
+%    \begin{macrocode}
+\def\PstHexagon@i[#1]{{%
+\psset{PolyNbSides=6}%
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Heptagon (seven sides).
+%
+% \begin{macro}{\PstHeptagon}
+%    \begin{macrocode}
+\def\PstHeptagon{%
+\pst@ifstar{\@ifnextchar[{\PstHeptagon@i}{\PstHeptagon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstHeptagon@i}
+%    \begin{macrocode}
+\def\PstHeptagon@i[#1]{{%
+\psset{PolyNbSides=7,PolyRotation=38.57}% For heptagon (360/7*(3/4))
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Octogon (height sides).
+%
+% \begin{macro}{\PstOctogon}
+%    \begin{macrocode}
+\def\PstOctogon{%
+\pst@ifstar{\@ifnextchar[{\PstOctogon@i}{\PstOctogon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstOctogon@i}
+%    \begin{macrocode}
+\def\PstOctogon@i[#1]{{%
+\psset{PolyNbSides=8,PolyRotation=22.5}% For octogon (360/8/2)
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Nonagon (nine sides).
+%
+% \begin{macro}{\PstNonagon}
+%    \begin{macrocode}
+\def\PstNonagon{%
+\pst@ifstar{\@ifnextchar[{\PstNonagon@i}{\PstNonagon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstNonagon@i}
+%    \begin{macrocode}
+\def\PstNonagon@i[#1]{{%
+\psset{PolyNbSides=9,PolyRotation=10}% For nonagon (360/9/4)
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Decagon (ten sides).
+%
+% \begin{macro}{\PstDecagon}
+%    \begin{macrocode}
+\def\PstDecagon{%
+\pst@ifstar{\@ifnextchar[{\PstDecagon@i}{\PstDecagon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstDecagon@i}
+%    \begin{macrocode}
+\def\PstDecagon@i[#1]{{%
+\psset{PolyNbSides=10}%
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Dodecagon (twelve sides).
+%
+% \begin{macro}{\PstDodecagon}
+%    \begin{macrocode}
+\def\PstDodecagon{%
+\pst@ifstar{\@ifnextchar[{\PstDodecagon@i}{\PstDodecagon@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstDodecagon@i}
+%    \begin{macrocode}
+\def\PstDodecagon@i[#1]{{%
+\psset{PolyNbSides=12,PolyRotation=15}% For dodecagon (360/12/2)
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Star with five leaves, with internal lines.
+%
+% \begin{macro}{\PstStarFiveLines}
+%    \begin{macrocode}
+\def\PstStarFiveLines{%
+\pst@ifstar{\@ifnextchar[{\PstStarFiveLines@i}{\PstStarFiveLines@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstStarFiveLines@i}
+%    \begin{macrocode}
+\def\PstStarFiveLines@i[#1]{{%
+\psset{PolyOffset=2,PolyRotation=18}%
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+%   Star with five leaves.
+%
+% \begin{macro}{\PstStarFive}
+%    \begin{macrocode}
+\def\PstStarFive{%
+\pst@ifstar{\@ifnextchar[{\PstStarFive@i}{\PstStarFive@i[]}}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\PstStarFive@i}
+%    \begin{macrocode}
+\def\PstStarFive@i[#1]{{%
+\psset{PolyIntermediatePoint=0.38,PolyRotation=18}%
+\psset{#1}%
+\if@star\solid@star\fi
+\PstPolygon}}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pspolygonbox}
+%    \begin{macrocode}
+\newdimen\pst@dimm
+\newdimen\pst@dimn
+\newdimen\pst@dimo
+\newdimen\pst@dimp
+\def\pspolygonbox{\pst@object{pspolygonbox}}%   voss 2004-11-20
+%    \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\pspolygonbox@i}
+%    \begin{macrocode}
+\def\pspolygonbox@i{\pst@makebox\pspolygonbox@ii}
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pspolygonbox@ii}
+%    \begin{macrocode}
+%
+\def\pspolygonbox@ii{{%
+   \begingroup%
+   \pst@useboxpar%
+   \pst@dima=\pslinewidth%
+   \ifpsdoubleline%
+     \advance\pst@dima by \psdoublesep\pslinewidth%
+     \advance\pst@dima by \pslinewidth%
+   \fi%
+   \advance\pst@dima by \psframesep%
+   \pst@dimc=\wd\pst@hbox%
+   \pst@dimp=\pst@dimc\advance\pst@dimp by 2\pst@dima%
+   \pst@dimb=\dp\pst@hbox\pst@dimo=\pst@dimb%
+   \pst@dimd=\ht\pst@hbox\advance\pst@dimo by \pst@dimd% totalheight
+   \pst@pyth\pst@dimp\pst@dimo\pst@dimm%
+   \divide\pst@dimm by 2% Radius
+   \setbox\pst@hbox=\hbox{%
+     \ifpsboxsep\kern\pst@dima\fi% left side  
+     \begin@ClosedObj%
+       \addto@pscode{%
+         /framesep \pst@number\pst@dima def 
+	 /boxdepth \pst@number\pst@dimb framesep add def
+         /boxheight0 \pst@number\pst@dimd def
+         /boxheight boxheight0 framesep add def
+         /boxwidth \pst@number\pst@dimc def
+         /radius \pst@number\pst@dimm def
+         /order \PstPoly@NbSides\space def
+         /dAlpha 360 order div def
+	 /alpha \PstPoly@Rotation\space def
+         \pst@cp
+	 \tx@polygonB
+	 \psline@iii
+%%	 \tx@Line
+	 \tx@Polygon
+       }%
+       \def\pst@linetype{1}%
+       \showpointsfalse%
+     \end@ClosedObj%
+     \box\pst@hbox%
+     \ifpsboxsep\kern\pst@dima\fi%% right side
+   }%
+   \ifpsboxsep%
+     \pst@dimn=-.5\pst@dimo\advance\pst@dimn by \pst@dimb%
+     \advance\pst@dimn by 0.809\pst@dimm%
+     \dp\pst@hbox=\pst@dimn%
+     \pst@dimn=\pst@dimm\advance\pst@dimn by 0.5\pst@dimo%
+     \advance\pst@dimn by -\pst@dimb%
+     \ht\pst@hbox=\pst@dimn\fi%
+   \leavevmode%
+   \box\pst@hbox%
+   \endgroup%
+}\ignorespaces}
+%
+%
+% \begin{macro}{polygonB}
+%    \begin{macrocode}
+%
+\pst@def{polygonB}<{%
+  /x1 framesep neg def
+  /x2 boxwidth framesep add def
+  /y1 boxdepth framesep add neg def
+  /y2 boxheight framesep add def
+  x2 x1 add 2 div y2 y1 add 2 div translate
+  [
+  alpha cos radius mul 
+  alpha sin radius mul 
+  order { /alpha alpha dAlpha add def
+    radius alpha cos mul
+    radius alpha sin mul
+  } repeat
+}>
+%    \end{macrocode}
+% \end{macro}
+%
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Closing}
+%
+%   Catcodes restoration.
+%
+%    \begin{macrocode}
+\catcode`\@=\PstAtCode\relax
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</pst-poly>
+%    \end{macrocode}
+%
+% \section{\PstPolygonPackage{} test file}
+%
+%    \begin{macrocode}
+%<*tst-poly>
+%% `pst-poly' test file.
+%%
+\documentclass{article}
+
+\usepackage{fancyvrb}
+\usepackage[width=18cm]{geometry}
+\usepackage{pstricks}
+\usepackage{pst-poly}
+
+% Example macros - adapted from the `fvrb-ex' package
+% ---------------------------------------------------
+
+\makeatletter
+
+% Take care that we use here the four /?_Z characters as escape
+% characters, so we can't use these characters in the examples!
+
+% To highlight some verbatim sequences (comments, macro names, etc.)
+\def\HLEmphasize#1{\textit{#1}}
+\newcommand{\BS}{\texttt{\symbol{`\\}}}
+\def\HLMacro#1{\BS{}def\HLMacro@i#1\@nil}
+\def\HLMacro@i#1def#2\@nil{\HLReverse{#2}}
+\def\HLReverse#1{{\setlength{\fboxsep}{1pt}\HLReverse@i{#1}}}
+\def\HLReverse@i#1{\colorbox{black}{\textcolor{white}{\textbf{#1}}}}
+
+\def\Example{\FV@Environment{}{Example}}
+\def\endExample{%
+\end{VerbatimOut}
+\Below@Example{\jobname.tmp}
+\endgroup}
+
+\def\CenterExample{\FV@Environment{}{Example}}
+\def\endCenterExample{%
+\end{VerbatimOut}
+\begin{center}
+\Below@Example{\jobname.tmp}
+\end{center}
+\endgroup}
+
+\def\SideBySideExample{\FV@Environment{}{Example}}
+\def\endSideBySideExample{%
+\end{VerbatimOut}
+\SideBySide@Example{\jobname.tmp}
+\endgroup}
+
+\def\FVB@Example{%
+\begingroup
+\FV@UseKeyValues
+\parindent=0pt
+\multiply\topsep by 2
+\VerbatimEnvironment
+\begin{VerbatimOut}[gobble=2,codes={\catcode`\Z=12}]{\jobname.tmp}}
+
+\def\Below@Example#1{%
+\VerbatimInput[commentchar=Z,commandchars=/?_,frame=single,
+               numbers=left,numbersep=3pt]{#1}
+\catcode`\%=14\relax
+\catcode`\Z=9\relax
+% We suppress the effect of the highlighting macros
+\catcode`/=0\relax
+\catcode`?=1\relax
+\catcode`_=2\relax
+\def\HLEmphasize##1{##1}%
+\def\HLMacro##1{##1}%
+\def\HLReverse##1{##1}%
+\input{#1}\par}
+
+\def\SideBySide@Example#1{%
+\vskip 1mm
+\@tempdimb=\FV@XRightMargin
+\advance\@tempdimb -5mm
+\begin{minipage}[c]{\@tempdimb}
+  \fvset{xrightmargin=0pt}
+  \catcode`\%=14\relax
+  \catcode`\Z=9\relax
+  % We suppress the effect of the highlighting macros
+  \catcode`/=0\relax
+  \catcode`?=1\relax
+  \catcode`_=2\relax
+  \def\HLEmphasize##1{##1}%
+  \def\HLMacro##1{##1}%
+  \def\HLReverse##1{##1}%
+  \input{#1}
+\end{minipage}%
+\@tempdimb=\textwidth
+\advance\@tempdimb -\FV@XRightMargin
+\advance\@tempdimb 5mm
+\begin{minipage}[c]{\@tempdimb}
+  \VerbatimInput[commentchar=Z,commandchars=/?_,
+                 frame=single,numbers=left,numbersep=3pt,
+                 xleftmargin=5mm,xrightmargin=0pt]{#1}
+\end{minipage}
+\vskip 1mm}
+
+\makeatother
+
+% End of example macros from `fvrb-ex'
+
+\begin{document}
+
+% First serie
+
+\begin{CenterExample}
+  \multido{\i=3+1}{6}{%
+    \PstPolygon[PolyNbSides=\i]\hspace{5mm}}
+  \PstPolygon[PolyNbSides=30]
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=3+2}{6}{%
+    \PstPolygon[PolyOffset=2,PolyNbSides=\i]\hspace{5mm}}
+  \PstPolygon[PolyOffset=2,PolyNbSides=31]
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=3+1}{7}{%
+    \PstPolygon[PolyOffset=3,PolyNbSides=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=5+1}{7}{%
+    \PstPolygon[PolyOffset=4,PolyNbSides=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=5+2}{7}{%
+    \PstPolygon[PolyOffset=5,PolyNbSides=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\clearpage
+\begin{CenterExample}
+  \multido{\i=5+2}{7}{%
+    \PstPolygon[PolyOffset=7,PolyNbSides=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=5+2}{7}{%
+    \PstPolygon[PolyOffset=8,PolyNbSides=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=1+1}{7}{%
+    \PstPolygon[PolyOffset=\i,PolyNbSides=5]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=1+1}{7}{%
+    \PstPolygon[PolyOffset=\i,PolyNbSides=7]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=5+1}{7}{%
+    \PstPolygon[PolyCurves,PolyIntermediatePoint=0.1,PolyNbSides=\i]
+    \hspace{5mm}}
+\end{CenterExample}
+
+\clearpage
+\begin{CenterExample}
+  \multido{\i=5+1}{7}{%
+    \PstPolygon[PolyCurves,PolyIntermediatePoint=0.2,
+                PolyOffset=2,PolyNbSides=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\i=5+2}{7}{%
+    \PstPolygon[PolyCurves,PolyIntermediatePoint=0.1,
+                PolyOffset=3,PolyNbSides=\i]\hspace{5mm}}
+\end{CenterExample}
+
+% Second serie
+
+\begin{CenterExample}
+  \multido{\n=-1.4+0.5}{7}{%
+    \PstPolygon[PolyNbSides=3,PolyOffset=2,PolyIntermediatePoint=\n]
+    \hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\n=-1.4+0.5}{7}{%
+    \PstPolygon[PolyNbSides=5,PolyOffset=2,PolyIntermediatePoint=\n]
+    \hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\n=-1.4+0.5}{7}{%
+    \PstPolygon[PolyNbSides=13,PolyOffset=2,PolyIntermediatePoint=\n]
+    \hspace{5mm}}
+\end{CenterExample}
+
+\begin{CenterExample}
+  \multido{\n=-1.4+0.5}{7}{%
+    \PstPolygon[PolyNbSides=21,PolyOffset=2,PolyIntermediatePoint=\n]
+    \hspace{5mm}}
+\end{CenterExample}
+
+% Third serie
+
+\begin{CenterExample}
+  \psset{unit=1.4,linewidth=0.001,PolyNbSides=72,PolyEpicycloid}
+  \multido{\i=2+1}{4}{%
+    % Epicycloid of factor 1 is cardioid and of factor 2 nephroid
+    \PstPolygon[PolyOffset=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\begin{SideBySideExample}[xrightmargin=5cm]
+  % Epicycloid of factor 10
+  \PstPolygon[unit=2,linewidth=0.003,
+              PolyEpicycloid,PolyNbSides=72,PolyOffset=11]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}[xrightmargin=5cm]
+  % Epicycloid of factor 22
+  \PstPolygon[unit=2,linewidth=0.003,
+              PolyEpicycloid,PolyNbSides=72,PolyOffset=23]
+\end{SideBySideExample}
+
+\clearpage
+\begin{CenterExample}
+  \psset{unit=1.9,linewidth=0.001,PolyNbSides=72,PolyEpicycloid}
+  \multido{\i=71+1}{3}{%
+    \PstPolygon[PolyOffset=\i]\hspace{5mm}}
+\end{CenterExample}
+
+\fvset{xrightmargin=5cm}	% 5cm reserved for the graphic
+
+\begin{SideBySideExample}
+  % Epicycloid of factor 100
+  \PstPolygon[unit=2,linewidth=0.003,
+              PolyEpicycloid,PolyNbSides=72,PolyOffset=101]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}[xrightmargin=5cm]
+  % Epicycloid of factor 153
+  \PstPolygon[unit=2,linewidth=0.003,
+              PolyEpicycloid,PolyNbSides=72,PolyOffset=154]
+\end{SideBySideExample}
+
+\clearpage
+
+% Fourth serie
+
+\begin{SideBySideExample}
+  \providecommand{\PstPolygonNode}{%
+    \psdots[dotsize=0.2,linecolor=cyan](1;\INode)}
+  \PstPentagon[unit=2]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+  \providecommand{\PstPolygonNode}{%
+    \rput{*0}(1.2;\INode){\small\the\multidocount}}
+  \PstPolygon[unit=2,PolyNbSides=7,PolyOffset=2]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+  \providecommand{\PstPolygonNode}{%
+    \rput*{*0}(1;\INode){\small\the\multidocount}}
+  \PstHeptagon[unit=2,PolyOffset=2]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+  \newcounter{Letter}
+  \providecommand{\PstPolygonNode}{%
+    \setcounter{Letter}{\the\multidocount}%
+    \rput*{*0}(1;\INode){\small\Alph{Letter}}}
+  \PstHeptagon[unit=2,PolyOffset=3]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+  \providecommand{\PstPolygonNode}{%
+    \SpecialCoor
+    \degrees[3]
+    \rput{0.5}(0.5;\INode){%
+      \pspolygon*(0.5;0.5)(0.5;1.5)(0.5;2.5)}}
+  \PstTriangle
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+  \providecommand{\PstPolygonNode}{%
+    \psdots[dotstyle=o,dotsize=0.2](1;\INode)
+    \psline[linecolor=red]{->}(0.9;\INode)}
+  \PstPolygon[unit=2,PolyNbSides=8]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+  \providecommand{\PstPolygonNode}{%
+    \psline[linewidth=0.1mm,doubleline=true,
+            linecolor=green]{<->}(0;0)(1;\INode)}
+  \PstHexagon[unit=2]
+\end{SideBySideExample}
+
+\begin{SideBySideExample}
+  \newbox{\Star}
+  \savebox{\Star}{%
+    \PstStarFive*[unit=0.15,linecolor=red]}
+  \providecommand{\PstPolygonNode}{%
+    \rput{*0}(1;\INode){\usebox{\Star}}}
+  \shortstack{%
+    \PstNonagon\\[5mm]
+    \PstDodecagon[linestyle=none]}
+\end{SideBySideExample}
+
+\end{document}
+%</tst-poly>
+%    \end{macrocode}
+%
+%
+% \Finale
+% \PrintIndex
+% \PrintChanges
+%
+\endinput
+%%
+%% End of file `pst-poly.dtx'
-- 
cgit v1.2.3

