summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-08-20 20:04:25 +0000
committerKarl Berry <karl@freefriends.org>2014-08-20 20:04:25 +0000
commit1dd6e5bec91358ff6bcd1964121979187a676cb4 (patch)
tree6ca5c7d1f77af1098886ff908660fa6279e1e31d
parentad409dcf2ee3052e025ecf5cca832ae5147ad253 (diff)
pst-spirograph (20aug14)
git-svn-id: svn://tug.org/texlive/trunk@34995 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/Changes11
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/README15
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/README.anim8
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim1.tex20
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim2.tex20
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim3.tex20
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim4.tex21
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim5.tex21
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim6.tex20
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim7.tex19
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/animation/anim8.tex20
-rwxr-xr-xMaster/texmf-dist/doc/generic/pst-spirograph/animation/runall.sh13
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.bib96
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.pdfbin0 -> 10196728 bytes
-rw-r--r--Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.tex217
-rw-r--r--Master/texmf-dist/dvips/pst-spirograph/pst-spirograph.pro177
-rw-r--r--Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex266
-rw-r--r--Master/texmf-dist/tex/latex/pst-spirograph/pst-spirograph.sty29
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check3
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds1
-rw-r--r--Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc3
-rw-r--r--Master/tlpkg/tlpsrc/pst-spirograph.tlpsrc0
22 files changed, 998 insertions, 2 deletions
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/Changes b/Master/texmf-dist/doc/generic/pst-spirograph/Changes
new file mode 100644
index 00000000000..1173d0e22e4
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/Changes
@@ -0,0 +1,11 @@
+----- pst-spirograph.tex
+0.40 2014-08-18 - first CTAN version (hv)
+
+
+----- pst-spirograph.pro
+0.40 2014-08-18 - first CTAN version (hv)
+
+
+----- pst-spirograph.sty
+0.40 2014-08-18 - first CTAN version (hv)
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/README b/Master/texmf-dist/doc/generic/pst-spirograph/README
new file mode 100644
index 00000000000..0a01494a04d
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/README
@@ -0,0 +1,15 @@
+This version of pst-spirograph uses the xkeyval package, the extended
+version of keyval.
+
+Save the files pst-spirograph.sty|.tex| in a directory, which is part of your
+local TeX node. Then do not forget to run texhash to update this node
+if these packages are new to your TeX distribution.
+For more information see the documentation of your LaTeX distribution
+on installing packages into your LaTeX distribution or the
+TeX Frequently Asked Questions:
+(http://www.tex.ac.uk/cgi-bin/texfaq2html?label=instpackages).
+
+pst-spirograph needs pstricks, which should be part of your
+local TeX installation, otherwise get it from a CTAN server, f.ex.
+http://mirror.ctan.org/graphics/pstricks/
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/README.anim b/Master/texmf-dist/doc/generic/pst-spirograph/animation/README.anim
new file mode 100644
index 00000000000..333ea8a91d0
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/README.anim
@@ -0,0 +1,8 @@
+run all files with
+
+latex <file>
+dvips <file>
+ps2pdf <file>.ps
+
+and then view the pdf with the acrobat reader, available from Adobe
+if not already installed on your current system. \ No newline at end of file
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim1.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim1.tex
new file mode 100644
index 00000000000..9c7e611311c
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim1.tex
@@ -0,0 +1,20 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-3.5,-3.5)(3.5,3.5)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{72}{rA=0.001+20.000}{%
+ \psSpirograph[thetamax=\rA,Z1=59,Z2=24,m=0.1,ap=10,curvewidth=1.5pt,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,holenumber=5,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim2.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim2.tex
new file mode 100644
index 00000000000..caaf0254b4d
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim2.tex
@@ -0,0 +1,20 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-3,-3)(3,3)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{144}{rA=0.001+30.000}{%
+ \psSpirograph[thetamax=\rA,Z1=41,Z2=13,m=0.1,ap=10,,curvewidth=1.5pt,holenumber=3,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim3.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim3.tex
new file mode 100644
index 00000000000..2d980587c88
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim3.tex
@@ -0,0 +1,20 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-4,-4)(4,4)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{72}{rA=0.001+20.000}{%
+ \psSpirograph[thetamax=\rA,Z1=88,Z2=15,m=0.08,ap=10,curvewidth=1.5pt,holenumber=6,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim4.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim4.tex
new file mode 100644
index 00000000000..ca10a1911e9
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim4.tex
@@ -0,0 +1,21 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-3.5,-3.5)(3.5,3.5)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{100}{rA=0.001+30.000}{%
+ \psSpirograph[thetamax=\rA,Z1=122,Z2=69,m=0.05,ap=10,curvewidth=1.5pt,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,holenumber=4,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
+
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim5.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim5.tex
new file mode 100644
index 00000000000..b6e17000375
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim5.tex
@@ -0,0 +1,21 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-3.5,-3.5)(3.5,3.5)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{72}{rA=0.001+20.000}{%
+ \psSpirograph[thetamax=\rA,Z1=59,Z2=24,m=0.1,ap=10,curvewidth=1.5pt,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,holenumber=5,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
+
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim6.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim6.tex
new file mode 100644
index 00000000000..3f8c8a3f9b5
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim6.tex
@@ -0,0 +1,20 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-4.5,-4.5)(4.5,4.5)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{72}{rA=0.001+20.000}{%
+ \psSpirograph[thetamax=\rA,Z1=20,Z2=30,m=0.1,ap=10,curvewidth=1.5pt,inner=false,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,holenumber=4,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim7.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim7.tex
new file mode 100644
index 00000000000..34fb2d22b3b
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim7.tex
@@ -0,0 +1,19 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-7,-7)(7,7)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{72}{rA=0.001+20.000}{%
+ \psSpirograph[thetamax=\rA,Z1=36,Z2=24,m=0.15,ap=20,curvecolor={[rgb]{0.875 0 0.5}},inner=false,
+ curvewidth=1.5pt,linewidth=0.025,fillstyle=solid,polarangle=\rA,holenumber=0,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim8.tex b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim8.tex
new file mode 100644
index 00000000000..dfc25030254
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/anim8.tex
@@ -0,0 +1,20 @@
+\documentclass[border=5mm]{standalone}
+\usepackage{animate}
+\usepackage{pst-spirograph}
+
+\begin{document}
+
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}[showgrid=top](-7,-7)(7,7)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{74}{rA=0.001+20.000}{%
+ \psSpirograph[thetamax=\rA,Z1=27,Z2=12,m=0.4,curvecolor={[rgb]{0 0.25 0.5}},curvewidth=1.5pt,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,holenumber=4,opacity=0.5](0,0)}
+\end{animateinline}
+
+\end{document}
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/animation/runall.sh b/Master/texmf-dist/doc/generic/pst-spirograph/animation/runall.sh
new file mode 100755
index 00000000000..08fa638fb79
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/animation/runall.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+set `dir -R *.tex`
+for datei in *.tex
+do
+# rm -fr *.pdf
+ echo -n "Runnning file $datei ... "
+ FILE=`basename $datei .tex`
+ latex $FILE &> /dev/null
+ dvips $FILE &> /dev/null
+ ps2pdf $FILE.ps &> /dev/null
+ rm -fr $FILE.log $FILE.aux $FILE.ps $FILE.dvi
+ echo " done"
+done
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.bib b/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.bib
new file mode 100644
index 00000000000..38c466e7d6d
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.bib
@@ -0,0 +1,96 @@
+%% -*-bibtex-*-
+@STRING{tugboat = {TUGboat} }
+@STRING{dtk = {{D}ie {\TeX}nische {K}om{\"o}die} }
+
+@Book{companion,
+ author = {Michel Goosens and Frank Mittelbach and Sebastian Rahtz and Dennis Roegel and Herbert Vo\ss},
+ title = {The {\LaTeX} {G}raphics {C}ompanion},
+ publisher = {{Addison-Wesley Publishing Company}},
+ edition = {second},
+ year = {2007},
+ address = {Boston, Mass.}
+}
+
+@Article{girou:01:,
+ author = {Denis Girou},
+ title = {Pr\'esentation de {PST}ricks},
+ journal = {Cahier {GUT}enberg},
+ year = 1994,
+ volume = {16},
+ month = apr,
+ pages = {21-70}
+}
+
+@Article{girou:02:,
+ author = {{Timothy Van} Zandt and Denis Girou},
+ title = {Inside {PST}ricks},
+ journal = TUGboat,
+ year = 1994,
+ volume = {15},
+ month = sep,
+ pages = {239-246}
+}
+
+@Book{PostScript,
+ Author = {Kollock, Nikolai G.},
+ Title = {Post{S}cript richtig eingesetzt: vom {K}onzept zum
+ praktischen {E}insatz},
+ Publisher = {IWT},
+ Address = {Vaterstetten},
+ year = 1989,
+}
+
+@Manual{multido,
+ Title = {\texttt{multido.tex} - a loop macro, that supports fixed-point addition},
+ Author = {{Timothy Van} Zandt},
+ Organization = {},
+ Address = {\url{CTAN:/macros/generic/multido.tex}},
+ Note = {},
+ year = 1997
+}
+
+@Book{PSTricks2,
+ author = {Herbert Vo\ss{}},
+ title = {\texttt{PSTricks} -- {G}rafik f\"ur \TeX{} und \LaTeX},
+ edition = {6},
+ publisher = {DANTE -- lehmanns media},
+ year = {2010},
+ address = {Heidelberg/Berlin}
+}
+
+
+@Book{PSTricksE,
+ author = {Herbert Vo\ss},
+ title = {\texttt{PSTricks} -- {G}raphics for \LaTeX},
+ edition = {1.},
+ publisher = {UIT},
+ year = {2011},
+ address = {Cambridge/UK}
+}
+
+@Book{LaTeXRef,
+ author = {Herbert Vo\ss},
+ title = {\LaTeX\ Referenz},
+ edition = {2.},
+ publisher = {DANTE -- lehmanns media},
+ year = {2010},
+ address = {Heidelberg/Hamburg}
+}
+@Book{LaTeXRefE,
+ author = {Herbert Vo\ss},
+ title = {\LaTeX\ Quick Reference},
+ edition = {1.},
+ publisher = {UIT},
+ year = {2011},
+ address = {Cambridge/UK}
+}
+
+@Book{tbt,
+ author = {Victor Eijkhout},
+ title = {\TeX\ by Topic -- {A} \TeX{}nician Reference},
+ edition = {1},
+ publisher = {DANTE -- lehmanns media},
+ year = {2014},
+ address = {Heidelberg/Berlin}
+}
+
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.pdf b/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.pdf
new file mode 100644
index 00000000000..0a1dc5b7011
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.tex b/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.tex
new file mode 100644
index 00000000000..67982a1114e
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/pst-spirograph/pst-spirograph-doc.tex
@@ -0,0 +1,217 @@
+%% $Id: pst-spirograph-doc.tex 75 2014-08-19 18:38:05Z herbert $
+\documentclass[11pt,english,BCOR10mm,DIV12,bibliography=totoc,parskip=false,smallheadings
+ headexclude,footexclude,oneside]{pst-doc}
+\usepackage[utf8]{inputenc}
+\usepackage{pst-spirograph}
+\let\pstFV\fileversion
+\usepackage{animate}
+
+\def\UrlFont{\small\ttfamily}
+\makeatletter
+\def\verbatim@font{\small\normalfont\ttfamily}
+\makeatother
+
+\hypersetup{pdfauthor={Manuel Luque, Herbert Voss},pdftitle={Spirograoh}}
+%
+\def\bgImage{\begin{pspicture}(-4,-4)(4,4)
+\psSpirograph[thetamax=720,Z1=36,Z2=24,m=0.15,linewidth=0.025,ap=20,inner,
+ fillstyle=solid,polarangle=150,linecolor=blue,holenumber=0,opacity=0.4]
+\end{pspicture}%
+}
+
+\lstset{basicstyle=\ttfamily\footnotesize}
+
+\begin{document}
+\author{Manuel Luque\\Herbert Vo\ss}
+\docauthor{}
+\date{\today}
+\title{pst-spirograph \\\small v.\pstFV}
+\subtitle{A PSTricks package for drawing spirograph curves}
+\maketitle%
+
+\tableofcontents
+
+\begin{abstract}
+\vfill\noindent
+Thanks for feedback and contributions to:\\
+Uwe Ziegenhagen;
+\end{abstract}
+
+\clearpage
+
+\section{Introduction}
+
+
+\LPack{pst-spirograph} is a package to simulate the operation of a spirograph. A spirograph
+is a geometric drawing toy that produces mathematical roulette curves that are technically
+known as hypotrochoids and epitrochoids.
+The mathematician Bruno Abakanowicz invented the spirograph between 1881 and 1900.%
+\footnote{\url{http://en.wikipedia.org/wiki/Spirograph}}
+It was used to calculate an area delimited by curves.
+A hypotrochoid is generated by a fixed point on a circle rolling inside a fixed circle.%
+\footnote{\url{http://mathworld.wolfram.com/Spirograph.html}}
+It consists of a small toothed wheel rotating inside or outside a ring gear.
+The weighing tile wheel has nine drilled holes numbered from 0--8, through these small holes the tip of a
+pen or pencil can be put. % weighing tile???
+This causes the small wheel to rotate one or more laps around the crown and draws a hypocycloid.
+
+The wheel can also turn off a first fixed gear, it is thus possible to draw epicycloids . The command is written as %% turn of???
+
+
+\begin{BDef}
+\Lcs{psSpirograph}\OptArgs\Largr{\CAny}
+\end{BDef}
+
+
+and can optionally be followed by the coordinates of the point where you wish to place the
+Spirograph: \Lcs{psSpirograph}\OptArgs\Largr{x,y} which by default is centered at the origin.
+The optional parameters, including default values are indicated as following:
+
+\begin{compactenum}
+\item \LKeyset{Z1=20}: number of teeth of the wheel 1, the crown;
+\item \LKeyset{Z2=10}: number of teeth of the wheel 2;
+\item \LKeyset{m=0.5}: module of the gear;
+\item \LKeyset{ap=20}: pressure angle in degrees, it must be reduced if the number of teeth
+crown is large (if the path of the teeth will be incorrect), e.g. take \verb|Z1=120|;
+\item \LKeyset{holenumber=0} : active hole number;
+\item \LKeyset{polarangle=<value>}: polar angle in degrees to position the center
+of the small wheel, a useful parameter for animation.
+\end{compactenum}
+
+There are two Boolean values for the organisation of the two circles:
+
+\begin{compactitem}
+\item \Lkeyword{circles}: to draw circles of contact (default is \texttt{false}.
+\item \Lkeyword{inner}: the gear rotates inside of the crown (\texttt{true} --- default) or outside (\texttt{false}).
+\end{compactitem}
+
+
+In the drawing, the color selection wheel and the line of the curve is made with
+the following setting:
+
+
+\begin{compactenum}
+\item \LKeyset{color1=\{[rgb]\{0.625 0.75 1\}\}};
+\item \LKeyset{color2=\{[rgb]\{0.75 1 0.75\}\}};
+\item \Lkeyset{curvecolor=red};
+\item \LKeyset{curvewidth=1pt}: linewidth of the hypocycloid;
+\item \Lkeyset{circlescolor=red}.
+\end{compactenum}
+
+The origin of the spirograph can be set by the coordinates $(x,y)$. If the they are missing, $(0,0)$ is assumed.
+By default, the wheels are not filled with color. The color inside the wheels must be
+set by the option \Lkeyset{fillStyle=solid}.
+
+The choice of color and line thickness contour of the wheels is made with
+usual PSTricks options: \Lkeyword{linecolor} and \Lkeyword{linewidth}.
+The transparency of the small wheel is adjusted with the \Lkeyword{opacity} option of PSTricks.
+
+The last parameter is the angle \LKeyset{thetamax=360}, which represents the rotation in degrees
+the center of the small wheel around the ring, so it is a parameter to adjust,
+depending on the planned route of the hypocycloid.
+
+%\clearpage
+
+\section{Examples}
+
+\begin{LTXexample}[pos=t]
+\begin{pspicture}[showgrid=top](-7,-7)(7,7)
+\psframe*[linecolor=yellow!30](-7,-7)(7,7)
+\psSpirograph[thetamax=720,Z1=120,Z2=48,m=0.1,ap=10,linewidth=0.025,
+ fillstyle=solid,polarangle=200,holenumber=0,opacity=0.3]
+\psSpirograph[thetamax=720,Z1=120,Z2=48,m=0.1,ap=10,linewidth=0.025,
+ fillstyle=solid,polarangle=340,holenumber=3,opacity=0.3,curvecolor=blue]
+\psSpirograph[thetamax=720,Z1=120,Z2=48,m=0.1,ap=10,linewidth=0.025,
+ fillstyle=solid,polarangle=90,holenumber=6,opacity=0.3,curvecolor=green]
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t]
+\begin{pspicture}[showgrid=top](-7,-7)(7,7)
+\psframe*[linecolor=yellow!30](-7,-7)(7,7)
+\psSpirograph[thetamax=720,Z1=120,Z2=48,m=0.1,ap=10,linewidth=0.025,
+ fillstyle=solid,polarangle=200,holenumber=3,opacity=0.75]
+\end{pspicture}
+\end{LTXexample}
+
+
+
+\begin{LTXexample}[pos=t]
+\begin{pspicture}[showgrid=top](-7,-7)(7,7)
+\psframe*[linecolor=gray!20](-7,-7)(7,7)
+\psSpirograph[thetamax=720,Z1=36,Z2=24,m=0.15,linewidth=0.025,ap=20,inner=false,
+ fillstyle=solid,polarangle=150,linecolor=blue,holenumber=0,opacity=0.8]
+\end{pspicture}
+\end{LTXexample}
+
+\begin{LTXexample}[pos=t]
+\begin{pspicture}[showgrid=top](-7,-7)(7,7)
+\psframe*[linecolor=yellow!30](-7,-7)(7,7)
+\psSpirograph[thetamax=1440,Z1=27,Z2=12,m=0.4,linewidth=0.025,
+ curvecolor={[rgb]{0 0.25 0.5}},circles,fillstyle=solid,polarangle=30,
+ linecolor=blue,holenumber=0,opacity=0.75]
+\end{pspicture}
+\end{LTXexample}
+
+
+\begin{LTXexample}[pos=t]
+\begin{pspicture}[showgrid=top](-7,-7)(7,7)
+\psframe*[linecolor=yellow!30](-7,-7)(7,7)
+\psset{unit=0.5}
+\psSpirograph[thetamax=-1800,Z1=108,Z2=15,m=0.2,linewidth=0.025,ap=10,
+ fillstyle=solid,polarangle=54,linecolor=blue,holenumber=0,opacity=0.75]
+\end{pspicture}
+\end{LTXexample}
+
+
+
+\begin{LTXexample}[pos=t]
+\begin{pspicture}[showgrid=top](-7,-7)(7,7)
+\psframe*[linecolor=gray!20](-7,-7)(7,7)
+\psSpirograph[thetamax=1800,Z1=36,Z2=30,m=0.15,linewidth=0.025,ap=20,inner=false,
+ fillstyle=solid,polarangle=150,linecolor=blue,holenumber=4,opacity=0.8]
+\end{pspicture}
+\end{LTXexample}
+
+\clearpage
+\section{Animations}
+
+With package \LPack{animate} one can easily create animations:
+
+\begin{LTXexample}[pos=t]
+\begin{animateinline}[
+ width=0.9\linewidth,
+ begin={\begin{pspicture}(-3.5,-3.5)(3.5,3.5)},
+ end={\end{pspicture}},
+ palindrome,controls,
+% autoplay
+]{5}
+\multiframe{100}{rA=0.001+30.000}{%
+ \psSpirograph[thetamax=\rA,Z1=59,Z2=24,m=0.1,ap=10,curvewidth=1.5pt,
+ linewidth=0.025,fillstyle=solid,polarangle=\rA,holenumber=5,opacity=0.5](0,0)}
+\end{animateinline}
+\end{LTXexample}
+
+
+There are some more examples in the documention directory of the package.
+
+\clearpage
+
+\section{List of all optional arguments for \texttt{pst-spirograph}}
+
+\xkvview{family=pst-spirograph,columns={key,type,default}}
+
+
+\bgroup
+\nocite{*}
+\raggedright
+\bibliographystyle{plain}
+\bibliography{\jobname}
+\egroup
+
+\printindex
+
+
+
+\end{document}
+
diff --git a/Master/texmf-dist/dvips/pst-spirograph/pst-spirograph.pro b/Master/texmf-dist/dvips/pst-spirograph/pst-spirograph.pro
new file mode 100644
index 00000000000..bdf690be00e
--- /dev/null
+++ b/Master/texmf-dist/dvips/pst-spirograph/pst-spirograph.pro
@@ -0,0 +1,177 @@
+%% $Id: pst-spirograph.pro 75 2014-08-19 18:38:05Z herbert $
+%%
+% PostScript prologue for pst-spirograph.tex.
+%
+% Version 0.40, 2014/08/18
+%
+/tx@spirographDict 10 dict def
+tx@spirographDict begin
+/coorPen {
+ 1 dict begin
+ /t exch def
+ r2 qi t cos mul ki qi t mul 60 ni mul sub cos mul add mul cm
+ r2 qi t sin mul ki qi t mul 60 ni mul sub sin mul sub mul cm
+ end
+} def
+/coorPen2 {
+ 1 dict begin
+ /t exch def
+ r2 qi2 t cos mul ki qi2 t mul 60 ni mul neg 180 Z2 div sub sub cos mul sub mul cm
+ r2 qi2 t sin mul ki qi2 t mul 60 ni mul neg 180 Z2 div sub sub sin mul sub mul cm
+ end
+} def
+/Datas1 {
+ /Z@ exch def
+ /m@ exch def
+ /R@ {m@ Z@ mul 2 div } bind def % cercle primitif
+ /Rb {R@ ap cos mul } bind def % cercle de base
+ /Rp {R@ 2 mul 2.5 m@ mul sub 2 div } bind def % cercle de pied
+ /Rt {R@ 2 mul 2 m@ mul add 2 div } bind def % cercle de tête
+} def
+/Datas2 {
+ /Z@ exch def
+ /m@ exch def
+ /R@ {m@ Z@ mul 2 div } bind def % cercle primitif
+ /Rb {R@ ap cos mul } bind def % cercle de base
+ /Rp {R@ 2 mul 2 m@ mul sub 2 div } bind def % cercle de pied
+ /Rt {R@ 2 mul 2.5 m@ mul add 2 div } bind def % cercle de tête
+} def
+/Calculs { % les valeurs suivantes sont en radians
+ /ThetaP {R@ Rb div dup mul 1 sub sqrt } bind def % intersection avec cercle primitif
+ /ThetaT {Rt Rb div dup mul 1 sub sqrt } bind def % intersection avec cercle de tete
+ % Les valeurs suivantes ont en degrés
+ /ThetaTdeg {Rt Rb div dup mul 1 sub sqrt RadtoDeg } bind def %
+ /ThetaPdeg {R@ Rb div dup mul 1 sub sqrt RadtoDeg } bind def
+ /DeltaP {ThetaPdeg sin ThetaP ThetaPdeg cos mul sub
+ ThetaPdeg cos ThetaP ThetaPdeg sin mul add atan } bind def
+ /DeltaT {ThetaTdeg sin ThetaT ThetaTdeg cos mul sub
+ ThetaTdeg cos ThetaT ThetaTdeg sin mul add atan } bind def
+ /DeltaS {Pi 2 div Z@ div } bind def
+ /DeltaSdeg {90 Z@ div } bind def
+ /AngleDent {360 Z@ div} bind def
+ /Alpha {DeltaSdeg DeltaP add DeltaT sub } bind def
+ /2Beta {DeltaSdeg DeltaP add 2 mul } bind def
+ /Beta_ {DeltaSdeg DeltaP add neg} bind def
+ /ptA {Rp cm 0} bind def
+ /ptB {Rb cm 0} bind def
+ /ptC {Rp cm DeltaSdeg 2 mul neg 2Beta 2 div add cos mul
+ Rp cm DeltaSdeg 2 mul neg 2Beta 2 div add sin mul} bind def
+ /ptA'{Rp cm DeltaP DeltaSdeg add 2 mul cos mul
+ Rp cm DeltaP DeltaSdeg add 2 mul sin mul} bind def
+ /ptB'{Rb cm DeltaP DeltaSdeg add 2 mul cos mul
+ Rb cm DeltaP DeltaSdeg add 2 mul sin mul} bind def
+ /ptC'{Rp cm DeltaSdeg 3 mul DeltaP add cos mul
+ Rp cm DeltaSdeg 3 mul DeltaP add sin mul} bind def
+ /Raxe {Rp 4 div } bind def
+ /A@0 14.5 def % position et largeur de la clavette
+ % rayon de raccordement sur le cercle de pied
+ /Rarct {Rp Pi mul Z@ div 12 div cm} bind def
+} def
+% Le symetrique P' de P par rapport a la l'axe de la dent
+% Delta(axe de la dent) y=x*tan(Beta)
+% x'=y*sin(2*Beta)+x*cos(2*Beta)
+% y'=x*sin(2*Beta)-y*cos(2*Beta)
+% x y symAxe -> x' y'
+/symAxe {
+ 2 dict begin
+ /y exch def
+ /x exch def
+ y 2Beta sin mul x 2Beta cos mul add % x'
+ x 2Beta sin mul y 2Beta cos mul sub % y'
+ end
+} def
+ %
+% Rotation pour amener l'axe de la dent horizontal
+%
+/RotDent {
+ 2 dict begin
+ /y exch def
+ /x exch def
+ i@ cos x mul i@ sin y mul sub
+ i@ sin x mul i@ cos y mul add
+ end
+} def
+% developpante du cercle de base
+%
+/devCercle {
+ 1 dict begin
+ /t exch def % en degres
+ Rb t cos t DegtoRad t sin mul add mul cm % x
+ Rb t sin t DegtoRad t cos mul sub mul cm % y
+ end
+} def
+% trace des cercles
+%%%% definition de la roue dentee %%%%%%
+/Roue {
+% arc de développante
+/tabArcDev [
+0 1 ThetaTdeg { /i@ exch def
+ [i@ devCercle] } for
+ ] def
+%
+/n@ tabArcDev length def
+%
+/tabDent [
+% l'arc de developpante initial
+ tabArcDev aload pop
+% l'arc ce cercle de tete
+DeltaT 0.1 2Beta DeltaT sub {/i@ exch def
+ [Rt cm i@ cos mul
+ Rt cm i@ sin mul]
+ } for
+% le symetrique de l'arc de developpante par rapport a l'axe de la dent
+n@ 1 sub -1 0 {
+ /compteur exch def
+ [tabArcDev compteur get aload pop symAxe]
+ } for
+ ] def
+% trace de la dent
+/n2@ tabDent length def
+newpath
+ptC moveto
+0 1 Z@ 1 sub {/i@ exch AngleDent mul def
+ifinner
+{
+ wheel 2 eq { ptA RotDent ptB RotDent Rarct arct ptB RotDent lineto }
+ { ptA RotDent lineto ptB RotDent lineto } ifelse
+}
+{
+ Rp Rb eq { ptA RotDent lineto ptB RotDent lineto }
+ { ptA RotDent ptB RotDent Rarct arct ptB RotDent lineto } ifelse
+} ifelse
+ 0 1 n2@ 1 sub {
+ /compteur exch def
+ tabDent compteur get aload pop
+ RotDent lineto } for
+ifinner
+ {wheel 2 eq {
+ Rp Rb eq {
+ ptA' RotDent lineto ptC' RotDent lineto
+ }{
+ ptA' RotDent ptC' RotDent Rarct arct
+ ptC' RotDent lineto } ifelse
+ } {
+ ptA' RotDent lineto ptC' RotDent lineto } ifelse
+}{
+ Rp Rb eq {
+ ptA' RotDent lineto ptC' RotDent lineto
+ }{
+ ptA' RotDent ptC' RotDent Rarct arct
+ ptC' RotDent lineto }
+ ifelse
+} ifelse
+} for
+} def
+% pour l'engrenage interieur
+/COURONNE { 0 0 Rt 1.1 mul cm 360 0 arcn } def
+%
+/untrou {
+ newpath
+ a@ THETA DegtoRad mul THETA cos mul neg
+ a@ THETA DegtoRad mul THETA sin mul
+ 0.05 cm 0 360 arc
+ closepath
+} def
+%
+end
+%% \ No newline at end of file
diff --git a/Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex b/Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex
new file mode 100644
index 00000000000..57b941240e6
--- /dev/null
+++ b/Master/texmf-dist/tex/generic/pst-spirograph/pst-spirograph.tex
@@ -0,0 +1,266 @@
+%% $Id: pst-spirograph.tex 75 2014-08-19 18:38:05Z herbert $
+%%
+%% This is file `pst-spirograph.tex',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-spirograph.tex'
+%%
+%% COPYRIGHT 2015 by
+%% Manuel Luque
+%% 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 CTAN:/macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-spirograph' is a PSTricks package to show sprograph curves
+%%
+%%
+\csname PSTSPIROGRAPHLoaded\endcsname
+\let\PSTSPIROGRAPHLoaded\endinput
+% Requires some packages
+\ifx\PSTricksLoaded\endinput\else \input pstricks \fi
+\ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi
+\def\fileversion{0.40}
+\def\filedate{2014/08/18}
+\message{`PSTSPIROGRAPH' v\fileversion, \filedate}
+
+\edef\PstAtCode{\the\catcode`\@}
+\catcode`\@=11\relax
+\pst@addfams{pst-spirograph}
+\pstheader{pst-spirograph.pro}
+\define@key[psset]{pst-spirograph}{Z1}[20]{\def\psk@ZA{#1 }}
+\psset[pst-spirograph]{Z1=20}
+\define@key[psset]{pst-spirograph}{Z2}[10]{\def\psk@ZB{#1 }}
+\psset[pst-spirograph]{Z2=10}
+\define@key[psset]{pst-spirograph}{m}[0.5]{\def\psk@m{#1 }}
+\psset[pst-spirograph]{m=0.5}
+\define@key[psset]{pst-spirograph}{ap}[20]{\def\psk@ap{#1 }}
+\psset[pst-spirograph]{ap=20}
+\define@key[psset]{pst-spirograph}{polarangle}[0]{\def\psk@polarangle{#1 }}
+\psset[pst-spirograph]{polarangle=0}
+\define@key[psset]{pst-spirograph}{holenumber}[1]{\def\psk@holenumber{#1 }}
+\psset[pst-spirograph]{holenumber=1}
+\define@key[psset]{pst-spirograph}{thetamax}[360]{\def\psk@thetamax{#1 }}
+\psset[pst-spirograph]{thetamax=360}
+%
+\define@key[psset]{pst-spirograph}{color1}[{[rgb]{0.625 0.75 1}}]{\pst@getcolor{#1}\pscolora}
+\psset[pst-spirograph]{color1={[rgb]{0.625 0.75 1}}}
+\define@key[psset]{pst-spirograph}{color2}[{[rgb]{0.75 1 0.75}}]{\pst@getcolor{#1}\pscolorb}
+\psset[pst-spirograph]{color2={[rgb]{0.75 1 0.75}}}
+\define@key[psset]{pst-spirograph}{circlescolor}[red]{\pst@getcolor{#1}\pscolorc}
+\psset[pst-spirograph]{circlescolor=red}
+\define@key[psset]{pst-spirograph}{curvecolor}[red]{\pst@getcolor{#1}\pscolord}
+\psset[pst-spirograph]{curvecolor=red}
+%
+\newdimen\pscurvewidth
+\define@key[psset]{pst-spirograph}{curvewidth}[1pt]{\pssetlength\pscurvewidth{#1}}
+\psset[pst-spirograph]{curvewidth=1pt}
+%% === Option pour dessiner le type d'engrenage ---------------------
+\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{inner}[true]{}
+\psset[pst-spirograph]{inner}
+%% === pour dessiner cercle de base et cercle primitif
+\define@boolkey[psset]{pst-spirograph}[Pst@spirograph@]{circles}[true]{}
+\psset[pst-spirograph]{circles=false}
+%
+\def\psSpirograph{\def\pst@par{}\pst@object{psSpirograph}}
+\def\psSpirograph@i{\@ifnextchar({\psSpirograph@ii}{\psSpirograph@ii(0,0)}}
+\def\psSpirograph@ii(#1){%
+\begin@SpecialObj
+\pst@@getcoor{#1}%
+\addto@pscode{
+tx@spirographDict begin
+\pst@coor /t@@y ED /t@@x ED
+1 setlinejoin
+/cm {\pst@number\psunit mul } bind def
+/Z1 \psk@ZA def
+/m1 \psk@m def
+/Z2 \psk@ZB def
+/m2 \psk@m def
+/ap \psk@ap def
+/polarAngle \psk@polarangle def
+/ni \psk@holenumber def % numero du trou
+ni 8 ge {/ni 8 def} if
+/thetamax \psk@thetamax def
+/ifinner \ifPst@spirograph@inner true \else false \fi def
+/ki 1 ni 9 div sub def
+/r2 m1 Z2 mul 2 div def
+/qi Z1 Z2 div 1 sub def
+/qi2 Z1 Z2 div 1 add def
+thetamax 0 le {/pas -1 def}{/pas 1 def} ifelse
+/tabSpirograph [ % tableau des points de l'hypocycloide
+0 pas thetamax {/i_ exch def [i_ coorPen]} for
+ ] def
+/tabSpirograph2 [ % tableau des points de l'epicycloide
+0 pas thetamax {/i_ exch def [i_ coorPen2]} for
+ ] def
+/nPts tabSpirograph length 1 sub def
+/nPts2 tabSpirograph2 length 1 sub def
+/color1 {\pst@usecolor\pscolora } def
+/color2 {\pst@usecolor\pscolorb } def
+/circlescolor {\pst@usecolor\pscolorc } def
+/curvecolor {\pst@usecolor\pscolord } def
+/linecolor {\pst@usecolor\pslinecolor} def
+/fillopacity \psk@opacityalpha def
+%
+/Circles {
+gsave
+[ \psk@dash\space ] 0 setdash
+newpath
+0 0 R@ cm 0 360 arc
+closepath
+circlescolor
+stroke
+% on ne dessine pas le cercle de base
+%newpath
+%0 0 Rb cm 0 360 arc
+%closepath
+%stroke
+grestore
+} def
+/trous {
+1 dict begin
+ /a@ {R@ cm 3 div 3.14159 div} bind def
+ gsave
+ positionAngular rotate
+ 0 60 540 {/THETA exch def
+ untrou
+ 1 setgray
+/fill \tx@setTransparency /fill load def
+ fill
+ untrou
+ linecolor
+ stroke
+ } for
+ grestore
+ end
+}def
+%%% Les dessins de l'engrenage %%%%%%
+%%%%%%%%%% Roue N°1 %%%%%%%%%%%%%%%%%
+/Roue1{
+1 dict begin
+/wheel 1 def
+gsave
+t@@x t@@y translate
+m1 Z1
+ifinner {
+ Datas2
+ Calculs
+ Beta_ rotate
+ Roue
+ COURONNE
+ closepath
+ \ifx\psk@fillstyle\relax\else color1 /fill \tx@setTransparency /fill load def fill \fi
+Roue
+closepath
+linecolor
+stroke
+COURONNE
+closepath
+linecolor
+stroke
+\ifPst@spirograph@circles Circles \fi
+}{
+ Datas1
+ Calculs
+ Beta_ rotate
+ Roue
+ closepath
+ \ifx\psk@fillstyle\relax\else color1 /fill \tx@setTransparency /fill load def fill \fi
+Roue
+closepath
+linecolor
+stroke
+\ifPst@spirograph@circles Circles \fi
+} ifelse
+grestore
+% dessin de l'hypocycloide ou de l'epicycloide
+gsave
+t@@x t@@y translate
+\ifPst@spirograph@inner
+tabSpirograph 0 get aload pop moveto
+1 1 nPts {/nP exch def
+ tabSpirograph nP get aload pop lineto
+ } for
+\else
+tabSpirograph2 0 get aload pop moveto
+1 1 nPts2 {/nP exch def
+ tabSpirograph2 nP get aload pop lineto
+ } for
+\fi
+curvecolor
+\pst@number\pscurvewidth SLW
+stroke
+grestore
+end
+} def
+Roue1
+%%%%%%%%%% Roue N°2 %%%%%%%%%%%%%%%%%
+/Roue2 {
+5 dict begin
+/wheel 2 def
+gsave
+m2 Z2 Datas1
+Calculs
+/a@ex m2 Z1 Z2 add mul 2 div cm def % entraxe engrenage exterieur
+/a@in m2 Z1 Z2 sub mul 2 div cm def % entraxe engrenage interieur
+/a@ {R@ cm 3 div 3.14159 div} bind def
+\ifPst@spirograph@inner
+ a@in polarAngle cos mul t@@x add a@in polarAngle sin mul t@@y add translate
+ Beta_ polarAngle Z1 Z2 sub Z2 div mul sub rotate
+ /positionAngular 2Beta 2 div def
+\else
+ a@ex polarAngle cos mul t@@x add a@ex polarAngle sin mul t@@y add translate
+ DeltaSdeg DeltaP add neg 180 Z2 div add 180 add polarAngle Z1 Z2 add Z2 div mul add rotate
+ /positionAngular Beta_ neg def
+\fi
+Roue
+closepath
+\ifx\psk@fillstyle\relax\else
+ color2
+/fill \tx@setTransparency /fill load def
+ fill
+\fi
+Roue
+closepath
+linecolor
+stroke
+trous
+\ifPst@spirograph@circles Circles \fi
+grestore
+gsave
+newpath
+\ifPst@spirograph@inner
+ a@in polarAngle cos mul t@@x add a@in polarAngle sin mul t@@y add translate
+ Beta_ polarAngle Z1 Z2 sub Z2 div mul sub rotate
+ /THETA 540 ni 60 mul sub def
+ positionAngular rotate
+ a@ THETA DegtoRad mul THETA cos mul neg
+ a@ THETA DegtoRad mul THETA sin mul
+ 0.06 cm 0 360 arc
+ \else
+ a@ex polarAngle cos mul t@@x add a@ex polarAngle sin mul t@@y add translate
+ DeltaSdeg DeltaP add neg 180 Z2 div add 180 add polarAngle Z1 Z2 add Z2 div mul add rotate
+ /a@ {R@ cm 3 div 3.14159 div} bind def
+ /THETA 540 ni 60 mul sub def
+ positionAngular rotate
+ a@ THETA DegtoRad mul THETA cos mul neg
+ a@ THETA DegtoRad mul THETA sin mul
+ 0.06 cm 0 360 arc
+\fi
+closepath
+curvecolor
+fill
+grestore
+ end
+ } def
+Roue2
+end
+}%
+\end@SpecialObj}% % fin de la commande PSTricks
+%
+\catcode`\@=\PstAtCode\relax
+%
+\endinput \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/pst-spirograph/pst-spirograph.sty b/Master/texmf-dist/tex/latex/pst-spirograph/pst-spirograph.sty
new file mode 100644
index 00000000000..8ab82b40ead
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pst-spirograph/pst-spirograph.sty
@@ -0,0 +1,29 @@
+% $Id: pst-spirograph.sty 73 2014-08-18 15:35:25Z herbert $
+%%
+%% This is file `pst-spirograph.sty'.
+%%
+%% IMPORTANT NOTICE:
+%%
+%% pst-spirograph.sty Copyright (C) 2015
+%% Manuel Luque
+%% Herbert Voß <hvoss@tug.org>
+%%
+%% This package may be distributed under the terms of the LaTeX Project
+%% Public License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1.0 or, at your option, any later version.
+%%
+\NeedsTeXFormat{LaTeX2e}
+
+\ProvidesPackage{pst-spirograph}
+ [2014/08/18 v0.40 LaTeX wrapper for `pst-spirograph' (hv)]
+%
+\RequirePackage{pstricks}
+\ProvidesPackage{pst-spirograph}[2014/08/18 package wrapper for pst-spirograph.tex]
+\input{pst-spirograph.tex}
+\ProvidesFile{pst-spirograph.tex}
+ [\filedate\space \fileversion\space `pst-spirograph' (ml,hv)]
+\IfFileExists{pst-spirograph.pro}{%
+ \ProvidesFile{pst-spirograph.pro}
+ [2014/08/18 v. 1.14, PostScript prologue file (hv)]
+ \@addtofilelist{pst-spirograph.pro}}{}%
+\endinput
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 2353db9d36f..e422920b8b8 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -406,7 +406,8 @@ my @TLP_working = qw(
pst-pad pst-pdgr pst-perspective
pst-platon pst-plot pst-poly pst-pdf pst-pulley
pst-qtree pst-rubans
- pst-sigsys pst-slpe pst-solarsystem pst-solides3d pst-soroban pst-spectra
+ pst-sigsys pst-slpe pst-solarsystem pst-solides3d pst-soroban
+ pst-spectra pst-spirograph
pst-stru pst-support pst-text pst-thick pst-tools pst-tree pst-tvz pst-uml
pst-vectorian pst-vowel pst-vue3d
pst2pdf pstool pstricks pstricks-add pstricks-examples
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index f42169449b3..bbc595494af 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -857,6 +857,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`);
'pst-solides3d', "&MAKEpst",
'pst-soroban', "&MAKEpst",
'pst-spectra', "&MAKEpst",
+ 'pst-spirograph', "&MAKEpst",
'pst-stru', "&MAKEpst",
'pst-support', "&MAKEpst",
'pst-text', "&MAKEpst",
diff --git a/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc b/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
index e2ab83864ca..92ed43badd3 100644
--- a/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-pstricks.tlpsrc
@@ -76,9 +76,10 @@ depend pst-rubans
depend pst-sigsys
depend pst-slpe
depend pst-solarsystem
-depend pst-spectra
depend pst-solides3d
depend pst-soroban
+depend pst-spectra
+depend pst-spirograph
depend pst-stru
depend pst-support
depend pst-text
diff --git a/Master/tlpkg/tlpsrc/pst-spirograph.tlpsrc b/Master/tlpkg/tlpsrc/pst-spirograph.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/pst-spirograph.tlpsrc