diff options
Diffstat (limited to 'graphics/pstricks/contrib/pst-fill')
-rw-r--r-- | graphics/pstricks/contrib/pst-fill/Changes | 4 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fill/Makefile | 49 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fill/README | 29 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fill/pst-fill.dtx | 1817 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fill/pst-fill.ins | 37 | ||||
-rw-r--r-- | graphics/pstricks/contrib/pst-fill/pst-fill.pdf | bin | 0 -> 1230303 bytes |
6 files changed, 1936 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pst-fill/Changes b/graphics/pstricks/contrib/pst-fill/Changes new file mode 100644 index 0000000000..9310a2082c --- /dev/null +++ b/graphics/pstricks/contrib/pst-fill/Changes @@ -0,0 +1,4 @@ +pst-fill.sty -------- + +pst-fill.tex -------- +1.01 2007-03-10 bugfix for incomplete ifx (hv) diff --git a/graphics/pstricks/contrib/pst-fill/Makefile b/graphics/pstricks/contrib/pst-fill/Makefile new file mode 100644 index 0000000000..1586e6f076 --- /dev/null +++ b/graphics/pstricks/contrib/pst-fill/Makefile @@ -0,0 +1,49 @@ + +# `Makefile' for `pst-fill.pdf', hv, 2006/08/11 + +.SUFFIXES : .tex .ltx .dvi .ps .pdf .eps + +MAIN = pst-fill + +LATEX = latex + +ARCHNAME = $(MAIN)-$(shell date +%y%m%d) + +ARCHFILES = $(MAIN).dtx $(MAIN).ins Makefile + +all : $(MAIN).sty doc clean + +$(MAIN).sty : $(MAIN).dtx +%.sty : %.dtx + tex $(basename $<).ins + +doc: $(MAIN).pdf + +$(MAIN).pdf : $(MAIN).ps + GS_OPTIONS=-dAutoRotatePages=/None ps2pdf $< + +$(MAIN).ps : $(MAIN).dvi + dvips $< + +$(MAIN).dvi : $(MAIN).dtx + $(LATEX) $< + if ! test -f $(basename $<).glo ; then touch $(basename $<).glo; fi + if ! test -f $(basename $<).idx ; then touch $(basename $<).idx; fi + makeindex -s gglo.ist -t $(basename $<).glg -o $(basename $<).gls \ + $(basename $<).glo + makeindex -s gind.ist -t $(basename $<).ilg -o $(basename $<).ind \ + $(basename $<).idx + $(LATEX) $< + $(LATEX) $< + +clean : + $(RM) $(addprefix $(MAIN), .log .aux .glg .glo .gls .ilg .idx .ind .tmp .toc .out) + $(RM) $(addprefix $(MAIN), .dvi .ps) + +veryclean : clean + $(RM) $(MAIN).pdf + +arch : + zip $(ARCHNAME).zip $(ARCHFILES) + +# EOF diff --git a/graphics/pstricks/contrib/pst-fill/README b/graphics/pstricks/contrib/pst-fill/README new file mode 100644 index 0000000000..71304960df --- /dev/null +++ b/graphics/pstricks/contrib/pst-fill/README @@ -0,0 +1,29 @@ +pst-fill: tiling and filing of areas and characters + + +pst-fill.dtx - The dtx file +pst-fill.ins - The ins file +pst-fill.pdf - The documentation, generated from the docstrip file + +to get the sty, the tex and the pdf file, run the Makefile or alternative + +latex pst-fill.ins +latex pst-fill.dtx +makeindex -s gind.ist pst-fill +makeindex -s gglo.ist -o pst-fill.gls pst-fill.glo +latex pst-fill.dtx +dvips pst-fill.dvi +ps2pdf pst-fill.ps + + +This version of pst-fill uses the extended version of the keyval +package. So be sure that you +- have installed xkeyval with the special pst-xkey.tex + (CTAN: tex-archive/macros/latex/contrib/xkeyval/) +- do not load another package after pst-fill, which loads + the old keyval.sty or pst-key.tex + + + +-- +Herbert Voss 2006-11-06 diff --git a/graphics/pstricks/contrib/pst-fill/pst-fill.dtx b/graphics/pstricks/contrib/pst-fill/pst-fill.dtx new file mode 100644 index 0000000000..43961608a2 --- /dev/null +++ b/graphics/pstricks/contrib/pst-fill/pst-fill.dtx @@ -0,0 +1,1817 @@ +% \iffalse meta-comment, etc. +%% +%% Package `pst-fill.dtx' +%% +%% Denis Girou (CNRS/IDRIS - France) <Denis.Girou@idris.fr> +%% Herbert Voss <voss@pstricks.de> +%% +%% 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-fill' is a PSTricks package for filling and tiling areas +%% +% \fi +% \changes{v1.01}{2007/03/10}{bugfix for incomplete ifx (hv)} +% \changes{v1.00}{2006/11/06}{use pst-xkey for extend keys (hv)} +% \changes{v0.99}{2004/08/17}{merge the VTeX and TeX versions (patch 4) (hv)} +% \changes{v0.98}{2004/06/22}{delete the Pst@Debug option and use the +% the one from pstricks to prevent a clash with pst-gr3d (hv)} +% \changes{v0.97}{2001/10/09}{make it work with VTeX (mv)} +% \changes{v0.94}{1997/04/08}{With a \PstTiling macro defined (or "tiling" optional parameter +% on \textbackslash usepackage[tiling]{pst-fill}), this file run exactly as +% the original boxfill.tex file from Timothy, version 0.94, +% except a correction in \textbackslash pst@ManualFillCycle to avoid a division by 0. +% It's the default.} +% \changes{v0.93}{1997/04/07}{With a \textbackslash PstTiling macro defined (or "tiling" optional parameter +% on \textbackslash usepackage[tiling]{pst-fill}) there are several add-ons +% and changes to do `tiling' rather than `filling' in "automatic" mode : +% - we fix the position of the beginning of tiling, +% - we allow normally the framing of the area as expected, using +% the line.... parameters +% - we define move parameters fillmovex, fillmovey and fillmove, +% - we define fillcyclex as previous fillcycle parameter, and add the +% fillcycley and fillcycle (both fillcyclex and fillcycley) ones +% - we can extend the tiling area using fillloopaddx, fillloopaddy and +% fillloopadd parameters, +% - we can debug and see the whole tiling area without clipping using +% PstDebug parameter, +% - for names consistancy, we can use fillangle in place of boxfillangle +% and fillsize in place of boxfillsize, +% - default value for fillsep is 0 and for fillsize is auto.} +% +% \DoNotIndex{\!,\",\#,\$,\%,\&,\',\(,\+,\*,\,,\-,\.,\/,\:,\;,\<,\=,\>,\?} +% \DoNotIndex{\@,\@B,\@K,\@cTq,\@f,\@fPl,\@ifnextchar,\@nameuse,\@oVk} +% \DoNotIndex{\[,\\,\],\^,\_,\ } +% \DoNotIndex{\^,\\^,\\\^,$\^$,$\\^$,$\\^$} +% \DoNotIndex{\0,\2,\4,\5,\6,\7,\8,} +% \DoNotIndex{\A,\a} +% \DoNotIndex{\B,\b,\Bc,\begin,\Bq,\Bqc} +% \DoNotIndex{\C,\c,\catcode,\cJA,\CodelineIndex,\csname} +% \DoNotIndex{\D,\def,\define@key,\Df,\divide,\DocInput,\documentclass,\pst@addfams} +% \DoNotIndex{\eCN,\edef,\else,\eHd,\eMcj,\EnableCrossrefs,\end,\endcsname} +% \DoNotIndex{\endCenterExample,\endExample,\endinput,\endpsclip} +% \DoNotIndex{\PrintIndex,\PrintChanges,\ProvidesFile} +% \DoNotIndex{\endpspicture,\endSideBySideExample,\Example} +% \DoNotIndex{\F,\f,\FdUrr,\fi,\filedate,\fileversion,\FV@Environment} +% \DoNotIndex{\FV@UseKeyValues,\FV@XRightMargin,\FVB@Example,\fvset} +% \DoNotIndex{\G,\g,\GetFileInfo,\gr,\GradientLoaded,\gsFKrbK@o,\gsj,\gsOX} +% \DoNotIndex{\hbadness,\hfuzz,\HLEmphasize,\HLMacro,\HLMacro@i} +% \DoNotIndex{\HLReverse,\HLReverse@i,\hqcu,\HqY} +% \DoNotIndex{\I,\i,\ifx,\input,\Ir,\IU} +% \DoNotIndex{\j,\jl,\JT,\JVodH} +% \DoNotIndex{\K,\k,\kfSlL} +% \DoNotIndex{\L,\let} +% \DoNotIndex{\message,\mHNa,\mIU} +% \DoNotIndex{\N,\nB,\newcmykcolor,\newdimen,\newif,\nW} +% \DoNotIndex{\O,\oCDJDo,\ocQhVI,\OnlyDescription,\oRKJ} +% \DoNotIndex{\P,\p,\ProvidesPackage,\psframe,\pslinewidth,\psset} +% \DoNotIndex{\PstAtCode,\PSTricksLoaded} +% \DoNotIndex{\q,\Qr,\qssRXq,\qu,\qXjFQp,\qYL} +% \DoNotIndex{\R,\r,\RecordChanges,\relax,\RlaYI,\rN,\Rp,\rp,\RPDXNn,\rput} +% \DoNotIndex{\S,\scalebox,\SgY,\SideBySide@Example,\SideBySideExample} +% \DoNotIndex{\SgY,\sk,\Sp,\space,\sZb} +% \DoNotIndex{\T,\the,\tw@} +% \DoNotIndex{\u,\UiSWGEf@,\uJi,\usepackage,\uVQdMM,\UYj} +% \DoNotIndex{\VerbatimEnvironment,\VerbatimInput,\VrC@} +% \DoNotIndex{\WhZ,\WjKCYb,\WNs} +% \DoNotIndex{\XkN,\XW} +% \DoNotIndex{\Z,\ZCM,\Ze} +% \DoNotIndex{\addtocounter,\advance,\alph,\arabic,\AtBeginDocument,\AtEndDocument} +% \DoNotIndex{\AtEndOfPackage,\begingroup,\bfseries,\bgroup,\box,\csname} +% \DoNotIndex{\else,\endcsname,\endgroup,\endinput,\expandafter,\fi} +% \DoNotIndex{\TeX,\z@,\p@,\@one,\xdef,\thr@@,\string,\sixt@@n,\reset,\or,\multiply,\repeat,\RequirePackage} +% \DoNotIndex{\@cclvi,\@ne,\@ehpa,\@nil,\copy,\dp,\global,\hbox,\hss,\ht,\ifodd,\ifdim,\ifcase,\kern} +% \DoNotIndex{\chardef,\loop,\leavevmode,\ifnum,\lower} +% \setcounter{IndexColumns}{2} +% +% ^^A To extend the height used for the text +% +% ^^A Aligned labels in a description environment +%\newenvironment{Description}[1]{% +%\begin{list}{nothing}{\setlength{\leftmargin}{#1} +%\setlength{\labelwidth}{\leftmargin}\setlength{\labelsep}{1mm}}} +%{\end{list}} +% +% ^^A For macro names +%\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} +% +% +% ^^A From ltugboat.cls +% ^^A For references +%\makeatletter +%\newcommand\acro[1]{\textsc{#1}\@} +%\def\CTAN{\acro{CTAN}} +%\let\texttub\textsl % ^^A redefined in other situations +%\def\TUB{\texttub{TUGboat}} +%\def\TUG{\TeX\ \UG} +%\def\tug{\acro{TUG}} +%\def\UG{Users Group} +% ^^A For the bibliography +%\let\@internalcite\cite +%\def\cite{\def\@citeseppen{-1000}% +% \def\@cite##1##2{(##1\if@tempswa , ##2\fi)}% +% \def\citeauthoryear##1##2##3{##1, ##3}\@internalcite} +%\def\etal{et\,al.\@} +%\newcommand\CTANdirectory[1]{\expandafter\urldef +% \csname CTAN@#1\endcsname\path} +%\newcommand\CTANfile[1]{\expandafter\urldef +% \csname CTAN@#1\endcsname\path} +%\newcommand\CTANref[1]{\expandafter\@setref\csname CTAN@#1\endcsname +% \relax{#1}} +%\makeatother +% ^^A Define CTAN addresses +%\CTANdirectory{mpattern}{graphics/metapost/macros/mpattern} +%\CTANdirectory{pstricks}{graphics/pstricks} +%\CTANdirectory{pst-fill.sty}{graphics/pstricks/latex/pst-fill.sty} +%\CTANdirectory{pst-fill}{graphics/pstricks/generic/pst-fill.tex} +%\CTANdirectory{Roegel}{graphics/metapost/contrib/macros/truchet} +%\CTANdirectory{xypic}{macros/generic/diagrams/xypic} +% +% ^^A Personal macros (D.G.) +% ^^A ---------------------- +% +% ^^A Some colors used +%\definecolor{LemonChiffon}{rgb}{1.,0.98,0.8} +%\definecolor{LightBlue} {rgb}{0.8,0.85,0.95} +%\definecolor{PaleGreen} {rgb}{0.88,1,0.88} +%\definecolor{PeachPuff} {rgb}{1.0,0.85,0.73} +% +% ^^A To define a unique string for TeX and LaTeX +%\newcommand{\AllTeX}{% +%{\rm(L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em)% +%T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}} +% +% ^^A Bibliography style +%\bibliographystyle{ltugbib} +% +% ^^A Name macros +%\newcommand{\FillPackage}{\textsf{`pst-fill'}} +%\newcommand{\XYpic}{% +%\leavevmode\hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}-pic}} +% +%\makeatletter +% +% ^^A Example environments +% ^^A (do not use in them the four JXYZ characters, that we will use +% ^^A as escape characters!) +% +% ^^A Default PSTricks parameters +% \psset{dimen=middle} +% +% ^^A Translation in PSTricks from the one drawn by Emmanuel Chailloux and +% ^^A Guy Cousineau for the MLgraph system +% ^^A (see /ftp.ens.fr:/pub/unix/lang/MLgraph/version-2.1/MLgraph-refman.ps.gz) +% ^^A The kangaroo itself is reproduce from an original picture from Raoul Raba +% \newcommand{\DimX}{2.47} +% \newcommand{\DimY}{4.8} +% \newcommand{\DimXDivTwo}{1.235} +% +% \newcommand{\KangarooItself}[1]{% +% ^^A Body +% \pspolygon[fillstyle=solid,fillcolor=#1]% +% (52.5,68)(55,72.5)(55.8,76.5)(56.8,79.8)(58.2,83)(60,85.8)(61.5,86.5) +% (64,87)(66,87.5)(67.8,87.3)(70,87)(71.5,87.3)(73,88)(74.7,88.5) +% (76,90.3)(77,91.5)(72.8,93.8)(69,96)(64.5,99)(59.4,103)(56.2,106.3) +% (53,110.5)(49.5,115.5)(47.2,119.9)(45.7,126)(43.2,123)(41.5,121)(37.5,125) +% (37,122.5)(36.8,120)(37,117)(37.6,113.5)(38.6,110)(40,106.3)(42,102.3) +% (43.5,99.5)(45,97)(46.2,94)(46.8,91.7)(47.2,88)(47,83.5)(46.3,80.8) +% (45.3,78.5)(42.5,76.5)(39.5,75.8)(36,75.9)(33,75.9)(29,76.2)(26,77) +% (22.3,77.5)(18,78.4)(12.8,79.3)(8.6,80)(5.5,80.3)(3,80.5)(0,80) +% (-5.2,78.5)(-9,76.3)(-11.2,74.8)(-13,72.5)(-16.5,68)(-16.5,68)(-19.5,62.5) +% (-22,58)(-25.5,53)(-29,48.5)(-32.5,45)(-36,42)(-39,39.5)(-44,37) +% (-49,35)(-51,34)(-53.5,34.5)(-55.5,36)(-56.5,38)(-56.5,40.5)(-55,41.5) +% (-53.5,41)(-51.5,41)(-50.5,43)(-50.5,44.5)(-51,47)(-51.5,47.2)(-56.5,47) +% (-58.5,46.5)(-60,44.7)(-62,42.3)(-63,39.5)(-63.5,36.3)(-63.5,33)(-63.1,29.5) +% (-61.5,26)(-58,23.6)(-54,22.2)(-50.7,22)(-47.5,22)(-44.5,22.3)(-41,23.5) +% (-36.8,25.8)(-33,28)(-28.5,31)(-23.4,35)(-20.2,38.3)(-17,42.5)(-13.5,47.5) +% (-11.2,51.9)(-9.7,58)(-7.2,55)(-5.5,53)(-1.5,57)(-1,54.5)(-0.8,52) +% (-1,49)(-1.6,45.5)(-2.6,42)(-4,38.3)(-6,34.3)(-7.5,31.5)(-9,29) +% (-10.2,26)(-10.8,23.7)(-11.2,20)(-11,15.5)(-10.3,12.8)(-9.3,10.5)(-6.5,8.5) +% (-3.5,7.8)(0,7.9)(3,7.9)(7,8.2)(10,9)(13.7,9.5)(18,10.4) +% (23.2,11.3)(27.4,12)(30.5,12.3)(33,12.5)(36,12)(41.2,10.5)(45,8.3) +% (47.2,6.8)(49,4.5)(52.5,0)(50,4.5)(49.2,8.5)(48.2,11.8)(46.8,15) +% (45,17.8)(43.5,18.5)(41,19)(39,19.5)(37.2,19.3)(35,19)(33.5,19.3) +% (32,20)(30.3,20.5)(29,22.3)(28,23.5)(28,23.5)(24.5,22.3)(21.5,22) +% (18.3,22)(15,22.2)(11,23.6)(7.5,26)(5.9,29.5)(5.5,33)(5.5,36.3) +% (6,39.5)(7,42.3)(9,44.7)(10.5,46.5)(12.5,47)(17.5,47.2)(18,47) +% (18.5,44.5)(18.5,43)(17.5,41)(15.5,41)(14,41.5)(12.5,40.5)(12.5,38) +% (13.5,36)(15.5,34.5)(18,34)(20,35)(25,37)(30,39.5)(33,42) +% (36.5,45)(40,48.5)(43.5,53)(47,58)(49.5,62.5)(52.5,68) +% ^^A Eye +% \pscircle*[linecolor=white](58.2,98.3){2\psxunit} +% \pscircle*(58.2,97.3){\psxunit} +% ^^A Mouth +% \psline(71.5,88)(70,89.3)(68.5,90.3)(67,91.9) +% ^^A Tear +% \psline(42,121)(45,118)(47,115.3)(48.5,112.7)(50,110)(51.8,106.5) +% (52.5,103.7)(53,100.5) +% \pspolygon(41.2,115.8)(43.2,114.7)(45,112.5)(47,109.8)(48,107)(49.5,104.2)% +% (50.5,101.6)(51,98.5)(47.7,100.6)(46,102.2)(44.8,104)(43.5,106) +% (42.5,108)(41.7,110.5)(41,113.2)} +% +% \newcommand{\Kangaroo}[1]{% +% \begin{pspicture}(\DimX,\DimY) +% \psset{unit=0.035278} +% \KangarooItself{#1} +% \end{pspicture}} +% +% \newcommand{\KangarooPstChart}[1]{{% +% \psset{xunit=0.006784,yunit=0.00735,linewidth=0.01} +% \begin{pspicture}(-65.5,0)(82,126) +% \KangarooItself{#1} +% \end{pspicture}}} +% +% +% ^^A For the possible index and changes log +% \setlength{\columnseprule}{0.6pt} +% +% ^^A Beginning of the documentation itself +%\title{\texttt{pst-fill}\\A PSTricks package for filling and tiling areas} +%\author{Timothy Van Zandt\thanks{\protect\url{tvz@econ.insead.fr}. (documentation by +% Denis Girou (\protect\url{Denis.Girou@idris.fr}) and Herbert Vo\ss (\protect\url{hvoss@tug.org}).}} +% +%\date{\shortstack{\today --- Version 1.00\\ +% {\small Documentation revised \today}}} +% \maketitle +% \tableofcontents +% +%\begin{abstract} +% \FillPackage{} is a PSTricks \cite{vanZandt93},\cite{Girou94},\cite{vanZandtGirou94}, +%\cite{Hoenig97},\cite{LGC97} package to draw easily +% various kinds of filling and tiling of areas. 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 around 200~lines long) but nevertheless really powerful. +% +% \hspace{5mm} It was written in 1994 by Timothy \textsc{van Zandt} but +% publicly available only in PSTricks 97 and without any documentation. +% We describe here the version \emph{97 patch 2} of December 12, 1997, which +% is the original one modified by myself to manage \emph{tilings} in the +% so-called \emph{automatic} mode. This article would like to serve both of +% reference manual and of user's guide. +% +%This package is available on \CTAN{} in the +% \texttt{graphics/pstricks} directory (files \texttt{latex/pst-fill.sty} and +% \texttt{generic/pst-fill.tex}). +%\end{abstract} +% +%\section{Introduction} +% +% Here we will refer as \emph{filling} as the operation which consist to fill +%a defined area by a pattern (or a composition of patterns). We will refer as +%\emph{tiling} as the operation which consist to do the same thing, but with +%the control of the starting point, which is here the upper left corner. +%The pattern is positioned relatively to this point. This make an essential +%difference between the two modes, as without control of the starting point we +%can't draw \emph{tilings} (sometimes called \emph{tesselations}) as used in +%many fields of Art and Science% +%\footnote{For an extensive presentation of tilings, in their history and usage +%in many fields, see the reference book \cite{GS87}. +% +% In the \TeX{} world, few work was done on tilings. You can look at the +%\emph{tile} extension of the \XYpic{} package \cite{XYpic}, at the articles of +%Kees \textsc{van der Laan} \cite[paragraph 7]{LAAN96} (the tiling was in +%fact directly done in PostScript) and \cite{LAAN97}, at the \MP{} program +%(available on \CTANref{Roegel}) by Denis \textsc{Roegel} for the +%\textsc{Truchet} contest in 1995 \cite{EsperetGirou98} and at the \MP{} +%package \cite{Bolek98} to draw patterns, which have a strong connection with +%tilings.}. +% +% Nevertheless, as tilings are a wide and difficult field in mathematics, this +%package is limited to simple ones, mainly \emph{monohedral} tilings with one +%prototile (which can be composite, see section \ref{sec:KindTiles}). With some +%experience and wiliness we can do more and obtained easily rather +%sophisticated results, but obviously hyperbolic tilings like the famous +%\textsc{Escher} ones or aperiodic tilings like the \textsc{Penrose} ones are +%not in the capabilities of this package. For more complex needs, we must used +%low level and more painfull technics, with the basic \cs{multido} +%and \cs{multirput} macros. +% +%\section{Package history and description of it two different modes} +% +% As already said, this package was written in 1994 by Timothy \textsc{van +%Zandt}. Two modes were defined, called respectively \emph{manual} and +%\emph{automatic}. For both, the pattern is generated on contiguous positions in +%a rather large area which include the region to fill, later cut to the +%required dimensions by clipping mechanism. In the first mode, the pattern is +%explicitely inserted in the PostScript file each time. In the second one, the +%result is the same but with an unique explicit insertion of the pattern and a +%repetition done by PostScript. Nevertheless, in this method, the control of +%the starting point was loosed, so it allowed only to \emph{fill} a region and +%not to \emph{tile} it. +% +% See the difference between the two modes, \emph{tiling}: +% {\psset{unit=0.5cm}% +% \psboxfill{\begin{pspicture}(1,1)\psframe[dimen=middle](1,1)\end{pspicture}} +% \begin{pspicture}(3,3.3) +% \psframe[fillstyle=boxfill](3,3) +% \end{pspicture}} +% and \emph{filling}: +%{% +% \makeatletter +%\pst@def{BoxFill}< +% gsave +% gsave \tx@STV CM grestore dtransform CM idtransform +% abs /h ED abs /w ED +% pathbbox +% h div round 2 add cvi /y2 ED +% w div round 2 add cvi /x2 ED +% h div round 2 sub cvi /y1 ED +% w div round 2 sub cvi /x1 ED +% /y2 y2 y1 sub def +% /x2 x2 x1 sub def +% CP +% y1 h mul sub neg /y1 ED +% x1 w mul sub neg /x1 ED +% clip +% y2 { +% /x x1 def +% x2 { +% save CP x y1 T moveto Box restore +% /x x w add def +% } repeat +% /y1 y1 h add def +% } repeat +% currentpoint currentfont grestore setfont moveto> +% \makeatother +% +% \psset{unit=0.5} +% \psboxfill{\begin{pspicture}(1,1)\psframe[dimen=middle](1,1)\end{pspicture}} +% \begin{pspicture}(3,3.3) +% \psframe[fillstyle=boxfill](3,3) +% \end{pspicture} +% or +% \begin{pspicture}(3,3.3) +% \psframe[fillstyle=boxfill](3,3) +% \end{pspicture} +%} +%as we can see that initial position is arbitrary and dependent of +%the current point. +% +% +% It's clear that usage of filling is very restrictive comparing to tiling, +%as desired effects required very often the possibility to control the starting +%point. So, this mode was of limited interest, but unfortunately the +%\emph{manual} one has the very big disadvantage to require very huge amounts +%of ressources, mainly in disk space and consequently in printing time. +%A small tiling can require sometimes several megabytes in \emph{manual} mode! +%So, it was very often not really usable in practice. +% +%It is why I modified the code, to allow tilings in \emph{automatic} mode, +%controlling in this mode too the starting point. And most of the time, that is +%to say if some special options are not used, the tiling is done exactly in the +%region described, which make it faster. So there is no more reason to use the +%\emph{manual} mode, apart very special cases where \emph{automatic} one cannot +%work, as explained later -- currently, I know only one case. +% +% To load this modified \emph{automatic} mode, with \LaTeX{} use +%simply:\newline +%\verb+\usepackage[tiling]{pst-fill}+\newline +%and in plain \TeX{} after:\newline +%\verb+\input{pst-fill}+\newline +%add the following definition:\newline +%\verb+\def\PstTiling{true}+ +% +% To obtain the original behaviour, just don't use the \emph{tiling} optional +%keyword at loading. +% +% Take care than in \emph{tiling} mode, I introduce also some other changes. +%First I define aliases on some parameter names for consistancy (all specific +%parameters will begin by the \texttt{fill} prefix in this case) and I change +%some default values, which were not well adapted for tilings (\texttt{fillsep} +%is set to 0 and as explained \texttt{fillsize} set to \texttt{auto}). I rename +%\texttt{fillcycle} to \texttt{fillcyclex}. I also restore normal way so that +%the frame of the area is drawn and all line (\texttt{linestyle}, +%\texttt{linecolor}, \texttt{doubleline}, etc.) parameters are now active (but +%there are not in non \emph{tiling} mode). And I also introduce new parameters +%to control the tilings (see below). +% +% \textbf{In all the following examples, we will consider only the +% \emph{tiling} mode.} +% +% To do a tiling, we have just to define the pattern with the +% \verb+\psboxfill+ macro and to use the new \texttt{fillstyle} +% \verb+boxfill+. +% +% Note that tilings are drawn from left to right and top to bottom, which can +%have an importance in some circonstances. +% +% PostScript programmers can be also interested to know that, even in the +%\emph{automatic} mode, the iterations of the pattern are managed directly by +%the PostScript code of the package which used only PostScript Level 1 +%operators. The special ones introduced in Level 2 for drawing of patterns +%\cite[section 4.9]{PostScript95} are not used. +% +% And first, for conveniance, we define a simple \cs{Tiling} macro, which +%will simplify our examples: +% +%\begin{verbatim} +% \newcommand{\Tiling}[2][]{% +% \edef\Temp{#1}% +% \begin{pspicture}#2 +% \ifx\Temp\empty +% \psframe[fillstyle=boxfill]#2 +% \else +% \psframe[fillstyle=boxfill,#1]#2 +% \fi +% \end{pspicture}} +%\end{verbatim} +% +% +%\newcommand{\Tiling}[2][]{% +% \edef\Temp{#1}% +% \begin{pspicture}#2 +% \ifx\Temp\empty +% \psframe[fillstyle=boxfill]#2 +% \else +% \psframe[fillstyle=boxfill,#1]#2 +% \fi +% \end{pspicture}} +% +%\subsection{Parameters} +% +% There are \textbf{14} specific parameters available to change the way the +% filling/tiling is defined, and one debugging option. +% +% \begin{Description}{2cm} +% \item [fillangle (real)\hfill :] the value of the rotation +% applied to the patterns (\emph{Default:~0}). +% \end{Description} +% +% +% In this case, we must force the tiling area to be notably larger than the +% area to cover, to be sure that the defined area will be covered after rotation. +% \lstset{gobble=2} +% \begin{LTXexample} +% \newcommand{\Square}{% +% \begin{pspicture}(1,1) +% \psframe[dimen=middle](1,1) +% \end{pspicture}} +% \psset{unit=0.5} +% \psboxfill{\Square} +% \Tiling[fillangle=45]{(3,3)}\quad +% \Tiling[fillangle=-60]{(3,3)} +% \end{LTXexample} +% +% \newcommand{\Square}{\begin{pspicture}(1,1)\psframe[dimen=middle](1,1)\end{pspicture}} +% +% \begin{Description}{2cm} +% \setcounter{footnote}{1} +% \item[\texttt{fillsepx} (real$\|$dim) :] value of the horizontal +% separation between consecutive patterns (\emph{Default:~0 for +% tilings\footnotemark, 2pt otherwise}). \footnotetext{This option was added +% by me, is not part of the original package and is available only if the +% \texttt{tiling} keyword is used when loading the package.} +% \setcounter{footnote}{1} +% \item [\texttt{fillsepy} (real$\|$dim)\hfill :] value of the vertical +% separation between consecutive patterns (\emph{Default:~0 for +% ti\-lings\footnotemark, 2pt otherwise}). +% \setcounter{footnote}{1} +% \item [\texttt{fillsep} (real$\|$dim)\hfill :] value of horizontal and +% vertical separations between consecutive patterns (\emph{Default:~0 for +% tilings\footnotemark, 2pt otherwise}). +% \end{Description} +% +% These values can be negative, which allow the tiles to overlap. +% +% \begin{LTXexample} +% \psset{unit=0.5} +% \psboxfill{\Square} +% \Tiling[fillsepx=2mm]{(3,3)} +% \Tiling[fillsepy=1mm]{(3,3)}\\ +% \Tiling[fillsep=0.5]{(3,3)} +% \Tiling[fillsep=-0.5]{(3,3)} +% \end{LTXexample} +% +% \begin{Description}{2cm} +% \item [\texttt{fillcyclex}\footnotemark\ (integer)\hfill :] Shift +% coefficient applied to each row (\emph{Default:~0}). +% \footnotetext{It was \texttt{fillcycle} in the original version.} +% \setcounter{footnote}{1} +% \item [\texttt{fillcycley}\footnotemark\ (integer)\hfill :] Same thing for +% columns (\emph{Default:~0}). +% \setcounter{footnote}{1} +% \item [\texttt{fillcycle}\footnotemark\ (integer)\hfill :] Allow to fix +% both \texttt{fillcyclex} and \texttt{fillcycley} directly to the same value +% (\emph{Default:~0}). +% \end{Description} +% +% For instance, if \texttt{fillcyclex} is 2, the second row of patterns will +% be horizontally shifted by a factor of $\frac{1}{2}=0.5$, and by a factor of +% 0.333 if \texttt{fillcyclex} is 3, etc.). These values can be negative. +% +% \begin{LTXexample}[width=0.35\linewidth] +% \psset{unit=0.5} +% \psboxfill{\Square} +% \newcommand{\TilingA}[1]{\Tiling[fillcyclex=#1]{(3,3)}} +% \TilingA{0} \TilingA{1}\\ +% \TilingA{2} \TilingA{3}\\[3mm] +% \TilingA{4} \TilingA{5}\\ +% \TilingA{6} \TilingA{-3}\\[3mm] +% \Tiling[fillcycley=2]{(3,3)} +% \Tiling[fillcycley=3]{(3,3)}\\ +% \Tiling[fillcycley=-3]{(3,3)} +% \Tiling[fillcycle=2]{(3,3)} +% \end{LTXexample} +% +% \begin{Description}{2cm} +% \setcounter{footnote}{1} +% \item [\texttt{fillmovex}\footnotemark\ (real$\|$dim)\hfill :] value of the +% horizontal moves between consecutive patterns (\emph{Default:~0}). +% \setcounter{footnote}{1} +% \item [\texttt{fillmovey}\footnotemark\ (real$\|$dim)\hfill :] value of the +% vertical moves between consecutive patterns (\emph{Default:~0}). +% \setcounter{footnote}{1} +% \item [\texttt{fillmove}\footnotemark\ (real$\|$dim)\hfill :] value of +% horizontal and vertical moves between consecutive patterns +% (\emph{Default:~0}). +% \end{Description} +% +% These parameters allow the patterns to overlap and to draw some special +% kinds of tilings. They are implemented only for the \emph{automatic} and +% \emph{tiling} modes and their values can be negative. +% +% In some cases, the effect of these parameters will be the same that with the +% \texttt{fillcycle?} ones, but you can see that it is not true for some other +% values. +% +% \begin{LTXexample} +% \psset{unit=0.5} +% \psboxfill{\Square} +% \Tiling[fillmovex=0.5]{(3,3)} +% \Tiling[fillmovey=0.5]{(3,3)}\\ +% \Tiling[fillmove=0.5]{(3,3)} +% \Tiling[fillmove=-0.5]{(3,3)} +% \end{LTXexample} +% +% \begin{Description}{2cm} +% \item [\texttt{fillsize} +% (auto$\|$\{(real$\|$dim,real$\|$dim)(real$\|$dim,real$\|$dim)\}) :] The +% choice of \emph{automatic} mode or the size of the area in \emph{manual} +% mode. If first pair values are not given, (0,0) is used. (\emph{Default: +% auto when \emph{tiling} mode is used, {(-15cm,-15cm)(15cm,15cm)} +% otherwise}). +% \end{Description} +% +% As explained in the introduction, the \emph{manual} mode can require very +% huge amount of computer ressources. So, it usage is to discourage in front off +% the \emph{automatic} mode. It seems only useful in special circonstances, in +% fact when the \emph{automatic} mode failed, which is known only in one case, +% for some kinds of EPS files, as the ones produce by dump of portions of +% screens (see \ref{sec:GraphicFiles}). +% +% \begin{Description}{2cm} +% \setcounter{footnote}{1} +% \item [\texttt{fillloopaddx}\footnotemark\ (integer)\hfill :] number of +% times the pattern is added on left and right positions (\emph{Default:~0}). +% \setcounter{footnote}{1} +% \item [\texttt{fillloopaddy}\footnotemark\ (integer)\hfill :] number of +% times the pattern is added on top and bottom positions (\emph{Default:~0}). +% \setcounter{footnote}{1} +% \item [\texttt{fillloopadd}\footnotemark\ (integer)\hfill :] number of +% times the pattern is added on left, right, top and bottom positions +% (\emph{Default:~0}). +% \end{Description} +% +% These parameters are only useful in special circonstances, as for complex +% patterns when the size of the rectangular box used to tile the area doesn't +% correspond to the pattern itself (see an example in Figure~\ref{fig:Sheeps}) +% and also sometimes when the size of the pattern is not a divisor of the size +% of the area to fill and that the number of loop repeats is not properly +% computed, which can occur. +% +% They are implemented only for the \emph{tiling} mode. +% +% \begin{Description}{2cm} +% \setcounter{footnote}{1} +% \item [\texttt{PstDebug}\footnotemark\ (integer, 0 or 1)\hfill :] to +% require to see the exact tiling done, without clipping (\emph{Default:~0}). +% \end{Description} +% +% It's mainly useful for debugging or to understand better how the tilings +% are done. It is implemented only for the \emph{tiling} mode. +% +% \begin{LTXexample} +% \psset{unit=0.3,PstDebug=1} +% \psboxfill{\Square} +% \psset{linewidth=1mm} +% \Tiling{(2,2)}\\[5mm] +% \Tiling[fillcyclex=2]{(2,2)}\\[1cm] +% \Tiling[fillmove=0.5]{(2,2)} +% \end{LTXexample} +% +% \vspace{3cm} +% \section{Examples} +% +% In fact this unique \cs{psboxfill} macro allow a lot a variations and +% different usages. We will try here to demonstrate this. +% +% \subsection{Kind of tiles} +% \label{sec:KindTiles} +% +% Of course, we can access to all the power of PSTricks macros to define the +% \emph{tiles} (\emph{patterns}) used. So, we can define complicated ones. +% +% Here we give four other Archimedian tilings (those built with only some +% regular polygons) among the twelve existing, first discovered completely by +% Johanes \textsc{Kepler} at the beginning of 17th century \cite{GS87}, the two +% other \emph{regular} ones with the tiling by squares, formed by a unique +% regular polygon, and two other formed by two different regular polygons. +% +% \begin{LTXexample}[pos=t] +% \newcommand{\Triangle}{% +% \begin{pspicture}(1,1) +% \pstriangle[dimen=middle](0.5,0)(1,1) +% \end{pspicture}} +% \newcommand{\Hexagon}{ +% ^^A sin(60)=0.866 +% \begin{pspicture}(0.866,0.75) +% \SpecialCoor +% ^^A Hexagon +% \pspolygon[dimen=middle]% +% (0.5;30)(0.5;90)(0.5;150)(0.5;210)(0.5;270)(0.5;330) +% \end{pspicture}} +% +% \psset{unit=0.5} +% \psboxfill{\Triangle} +% \Tiling{(4,4)}\hfill +% ^^A The two other regular tilings +% \Tiling[fillcyclex=2]{(4,4)}\hfill +% \psboxfill{\Hexagon} +% \Tiling[fillcyclex=2,fillloopaddy=1]{(5,5)} +% \end{LTXexample} +% +% \begin{LTXexample}[pos=t] +% \newcommand{\ArchimedianA}{% +% ^^A Archimedian tiling 3^2.4.3.4 +% \psset{dimen=middle} +% ^^A sin(60)=0.866 +% \begin{pspicture}(1.866,1.866) +% \psframe(1,1) +% \psline(1,0)(1.866,0.5)(1,1)(0.5,1.866)(0,1)(-0.866,0.5) +% \psline(0,0)(0.5,-0.866) +% \end{pspicture}} +% \newcommand{\ArchimedianB}{% +% ^^A Archimedian tiling 4.8^2 +% \psset{dimen=middle,unit=1.5} +% ^^A sin(22.5)=0.3827 ; cos(22.5)=0.9239 +% \begin{pspicture}(1.3066,0.6533) +% \SpecialCoor +% ^^A Octogon +% \pspolygon(0.5;22.5)(0.5;67.5)(0.5;112.5)(0.5;157.5) +% (0.5;202.5)(0.5;247.5)(0.5;292.5)(0.5;337.5) +% \end{pspicture}} +% +% \psset{unit=0.5} +% \psboxfill{\ArchimedianA} +% \Tiling[fillmove=0.5]{(7,7)}\hfill +% \psboxfill{\ArchimedianB} +% \Tiling[fillcyclex=2,fillloopaddy=1]{(7,7)} +% \end{LTXexample} +% +% \setcounter{footnote}{3} +% We can of course tile an area arbitrarily defined. And with the +% \texttt{addfillstyle} parameter\footnote{Introduced in PSTricks 97.}, we can +% easily mix the \texttt{boxfill} style with another one. +% +% \begin{LTXexample}[width=6cm] +% \psset{unit=0.5,dimen=middle} +% \psboxfill{% +% \begin{pspicture}(1,1) +% \psframe(1,1) +% \pscircle(0.5,0.5){0.25} +% \end{pspicture}} +% \begin{pspicture}(4,6) +% \pspolygon[fillstyle=boxfill,fillsep=0.25](0,1)(1,4)(4,6)(4,0)(2,1) +% \end{pspicture}\hspace{1em} +% \begin{pspicture}(4,4) +%% \pscircle[linestyle=none,fillstyle=solid,fillcolor=yellow,fillsep=0.5, +%% addfillstyle=boxfill](2,2){2} +% \end{pspicture} +% \end{LTXexample} +% +% Various effects can be obtained, sometimes complicated ones very easily, as +% in this example reproduced from one shown by Slavik \textsc{Jablan} in the +% field of \emph{OpTiles}, inspired by the \emph{Op-art}: +% +% \begin{LTXexample}[pos=t] +% \newcommand{\ProtoTile}{% +% \begin{pspicture}(1,1)%%% 1/12=0.08333 +% \psset{linestyle=none,linewidth=0, +% hatchwidth=0.08333\psunit,hatchsep=0.08333\psunit} +% \psframe[fillstyle=solid,fillcolor=black,addfillstyle=hlines,hatchcolor=white](1,1) +% \pswedge[fillstyle=solid,fillcolor=white,addfillstyle=hlines]{1}{0}{90} +% \end{pspicture}} +% \newcommand{\BasicTile}{% +% \begin{pspicture}(2,1) +% \rput[lb](0,0){\ProtoTile}\rput[lb](1,0){\psrotateleft{\ProtoTile}} +% \end{pspicture}} +% \ProtoTile\hfill\BasicTile\hfill +% \psboxfill{\BasicTile} +% \Tiling[fillcyclex=2]{(4,4)} +% \end{LTXexample} +% +% It is also directly possible to surimpose several different tilings. Here is +% the splendid visual proof of the \textsc{Pytha\-gore} theorem done by the arab +% mathematician \textsc{Annairizi} around the year 900, given by superposition +% of two tilings by squares of different sizes. +% +% \begin{LTXexample}[pos=t] +% \psset{unit=1.5,dimen=middle} +% \begin{pspicture*}(3,3) +% \psboxfill{\begin{pspicture}(1,1) +% \psframe(1,1)\end{pspicture}} +% \psframe[fillstyle=boxfill](3,3) +% \psboxfill{\begin{pspicture}(1,1) +% \rput{-37}{\psframe[linecolor=red](0.8,0.8)} +% \end{pspicture}} +% \psframe[fillstyle=boxfill](3,4) +% \pspolygon[fillstyle=hlines,hatchangle=90](1,2)(1.64,1.53)(2,2) +% \end{pspicture*} +% \end{LTXexample} +% +% In a same way, it is possible to build tilings based on figurative patterns, +% in the style of the famous \textsc{Escher} ones. Following an example of +% Andr\'e \textsc{Deledicq} \cite{Deledicq97}, we first show a simple tiling of +% the \emph{p1} category (according to the international classification of the +% 17~symmetry groups of the plane first discovered by the russian +% crystalographer Jevgraf \textsc{Fedorov} at the end of the 19th century): +% +% \begin{LTXexample}[pos=t] +% \newcommand{\SheepHead}[1]{% +% \begin{pspicture}(3,1.5) +% \pscustom[liftpen=2,fillstyle=solid,fillcolor=#1]{% +% \pscurve(0.5,-0.2)(0.6,0.5)(0.2,1.3)(0,1.5)(0,1.5) +% (0.4,1.3)(0.8,1.5)(2.2,1.9)(3,1.5)(3,1.5)(3.2,1.3) +% (3.6,0.5)(3.4,-0.3)(3,0)(2.2,0.4)(0.5,-0.2)} +% \pscircle*(2.65,1.25){0.12\psunit} % Eye +% \psccurve*(3.5,0.3)(3.35,0.45)(3.5,0.6)(3.6,0.4)% Muzzle +% ^^A % Mouth +% \pscurve(3,0.35)(3.3,0.1)(3.6,0.05) +% ^^A % Ear +% \pscurve(2.3,1.3)(2.1,1.5)(2.15,1.7)\pscurve(2.1,1.7)(2.35,1.6)(2.45,1.4) +% \end{pspicture}} +% \psboxfill{\psset{unit=0.5}\SheepHead{yellow}\SheepHead{cyan}} +% \Tiling[fillcyclex=2,fillloopadd=1]{(10,5)} +% \end{LTXexample} +% \label{fig:Sheeps} +% +% Now a tiling of the \emph{pg} category (the code for the kangaroo itself is +% too long to be shown here, but has no difficulties ; the kangaroo is reproduce +% from an original picture from Raoul \textsc{Raba} and here is a translation in +% PSTricks from the one drawn by Emmanuel \textsc{Chailloux} and Guy +% \textsc{Cousineau} for their MLgraph system \cite{MLgraphTSI}): +% +% \begin{LTXexample}[pos=t] +% \psboxfill{\psset{unit=0.4} +% \Kangaroo{yellow}\Kangaroo{red}\Kangaroo{cyan}\Kangaroo{green}% +% \psscalebox{-1 1}{% +% \rput(1.235,4.8){\Kangaroo{green}\Kangaroo{cyan}\Kangaroo{red}\Kangaroo{yellow}}}} +% \Tiling[fillloopadd=1]{(10,6)} +% \end{LTXexample} +% +% And here a \textsc{Wang} tiling \cite{Wang65}, \cite[chapter +% 11]{GS87}, based on very simple tiles of the form of a square and composed +% of four colored triangles. Such tilings are built with only a matching color +% constraint. Despite of it simplicity, it is an important kind of tilings, as +% \textsc{Wang} and others used them to study the special class of +% \emph{aperiodic} tilings, and also because it was shown that surprisingly this +% tiling is similar to a \textsc{Turing} machine. +% +% \begin{LTXexample}[pos=t] +% \newcommand{\WangTile}[4]{% +% \begin{pspicture}(1,1) +% \pspolygon*[linecolor=#1](0,0)(0,1)(0.5,0.5) +% \pspolygon*[linecolor=#2](0,1)(1,1)(0.5,0.5) +% \pspolygon*[linecolor=#3](1,1)(1,0)(0.5,0.5) +% \pspolygon*[linecolor=#4](1,0)(0,0)(0.5,0.5) +% \end{pspicture}} +% \newcommand{\WangTileA}{\WangTile{cyan}{yellow}{cyan}{cyan}} +% \newcommand{\WangTileB}{\WangTile{yellow}{cyan}{cyan}{red}} +% \newcommand{\WangTileC}{\WangTile{cyan}{red}{yellow}{yellow}} +% \newcommand{\WangTiles}[1][]{% +% \begin{pspicture}(3,3) \psset{ref=lb} +% \rput(0,2){\WangTileB} \rput(1,2){\WangTileA}% +% \rput(2,2){\WangTileC} \rput(0,1){\WangTileC}% +% \rput(1,1){\WangTileB} \rput(2,1){\WangTileA} +% \rput(0,0){\WangTileA} \rput(1,0){\WangTileC}% +% \rput(2,0){\WangTileB} +% #1 +% \end{pspicture}} +% \WangTileA\hfill\WangTileB\hfill\WangTileC\hfill +% \WangTiles[{\psgrid[subgriddiv=0,gridlabels=0](3,3)}]\hfill +% \psset{unit=0.4} \psboxfill{\WangTiles} \Tiling{(12,12)} +% \end{LTXexample} +% +% \subsection{External graphic files} +% \label{sec:GraphicFiles} +% +% We can also fill an arbitrary area with an external image. We have only, +% as usual, to matter of the \emph{BoundingBox} definition if there is no one +% provided or if it is not the accurate one, as for the well known +% \texttt{tiger} picture part of the \texttt{ghostscript} distribution. +% +% \begin{LTXexample}[pos=t] +% \psboxfill{%% Strangely require x1=x2... +% \begin{pspicture}(0,1)(0,4.1) +% \includegraphics[bb=17 176 560 74,width=3cm]{tiger} +% \end{pspicture}} +% \Tiling{(6,6.2)} +% \end{LTXexample} +% +% Nevertheless, there are some special files for which the \emph{automatic} +% mode doesn't work, specially for some files obtained by a screen dump, as in +% the next example, where a picture was reduced before it conversion in the +% \emph{Encapsulated PostScript} format by a screen dump utility. In this case, +% usage of the \emph{manual} mode is the only alternative, at the price of the +% real multiple inclusion of the EPS file. We must take care to specify the +% correct \texttt{fillsize} parameter, because otherwise the default values are +% large and will load the file many times, perhaps just really using few +% occurrences as the other ones would be clipped... +% +% \begin{LTXexample}[pos=t] +% \psboxfill{\includegraphics{flowers}} +% \begin{pspicture}(8,4) +% \psellipse[fillstyle=boxfill,fillsize={(8,4)}](4,2)(4,2) +% \end{pspicture} +% \end{LTXexample} +% +% \subsection{Tiling of characters} +% +% We can also use the \cs{psboxfill} macro to fill the interior of characters +% for special effects like these ones: +% +% \begin{LTXexample}[pos=t] +% \DeclareFixedFont{\bigsf}{T1}{phv}{b}{n}{4.5cm} +% \DeclareFixedFont{\smallrm}{T1}{ptm}{m}{n}{3mm} +% \psboxfill{\smallrm Since 182 days...} +% \begin{pspicture*}(8,4) +% \centerline{% +% \pscharpath[fillstyle=gradient,gradangle=-45, +% gradmidpoint=0.5,addfillstyle=boxfill, +% fillangle=45,fillsep=0.7mm] +% {\rput[b](0,0.1){\bigsf 2000}}} +% \end{pspicture*} +% \end{LTXexample} +% +% \begin{LTXexample}[pos=t] +% \DeclareFixedFont{\mediumrm}{T1}{ptm}{m}{n}{2cm} +% \psboxfill{% +% \psset{unit=0.1,linewidth=0.2pt} +% \Kangaroo{PeachPuff}\Kangaroo{PaleGreen}% +% \Kangaroo{LightBlue}\Kangaroo{LemonChiffon}% +% \psscalebox{-1 1}{% +% \rput(1.235,4.8){% +% \Kangaroo{LemonChiffon}\Kangaroo{LightBlue}% +% \Kangaroo{PaleGreen}\Kangaroo{PeachPuff}}}} +% ^^A % A kangaroo of kangaroos... +% \begin{pspicture}(8,2) +% \pscharpath[linestyle=none,fillstyle=boxfill,fillloopadd=1] +% {\rput[b](4,0){\mediumrm Kangaroo}} +% \end{pspicture} +% \end{LTXexample} +% +% \subsection{Other kinds of usage} +% +% Other kinds of usage can be imagined. For instance, we can use tilings in a +% sort of degenerated way to draw some special lines made by a unique or +% multiple repeating patterns. But it can be only a special dashed line, as here +% with three different dashes: +% +% \begin{LTXexample}[pos=t] +% \newcommand{\Dashes}{% +% \psset{dimen=middle} +% \begin{pspicture}(0,-0.5\pslinewidth)(1,0.5\pslinewidth) +% \rput(0,0){\psline(0.4,0)}% +% \rput(0.5,0){\psline(0.2,0)}% +% \rput(0.8,0){\psline(0.1,0)} +% \end{pspicture}} +% +% \newcommand{\SpecialDashedLine}[3]{% +% \psboxfill{#3} +% \Tiling[linestyle=none] +% {(#1,-0.5\pslinewidth)(#2,0.5\pslinewidth)}} +% +% \SpecialDashedLine{0}{7}{\Dashes} +% +% \psset{unit=0.5,linewidth=1mm,linecolor=red} +% \SpecialDashedLine{0}{10}{\Dashes} +% \end{LTXexample} +% +% It allow also to use special patterns in business graphics, as in the +% following example generated by \texttt{PstChart}\footnote{A personal +% development to draw business charts with PSTricks, not distributed.}. +% +% \vspace{3mm} +% \begin{figure}[!ht] +% \centering +% \psset{unit=0.75} +% ^^A % Generated by pstchart.sh version 0.21 (11/28/97) +% {\psset{dimen=middle} +% \psset{xunit=2,yunit=0.005} +% \begin{pspicture}(-0.6,-200)(6.6,2300) +% ^^A % Title +% \rput(3,2200){\shortstack{Fantaisist repartition of kangaroos\\ +% in the world (in thousands)}} +% ^^A % Frame background +% \psframe[fillstyle=solid,fillcolor=LemonChiffon](0,0)(6,2000) +% ^^A % Graduations +% \multido{\n=0+500}{5}{\rput[r](-0.12,\n){\psscalebox{0.8}{\n}}} +% ^^A % Minor ticks +% \multips(0,100)(0,100){19}{\psline[unit=4.8pt](1,0)} +% \multips(6,100)(0,100){19}{\psline[unit=4.8pt](-1,0)} +% ^^A % Major ticks +% \multips(0,500)(0,500){3}{\psline[unit=9.6pt](1,0)} +% \multips(6,500)(0,500){3}{\psline[unit=9.6pt](-1,0)} +% ^^A % Lines from major ticks marks +% \multips(0,500)(0,500){3}{\psline[linestyle=dotted,linewidth=0.6pt](6,0)} +% ^^A % Drawing for the data +% \psboxfill{\psset{unit=0.78\psxunit}\KangarooPstChart{red}} +% \psframe[linestyle=none,fillstyle=boxfill,fillloopaddy=1](0.61,0)(1.39,1800) +% \psboxfill{\psset{unit=0.78\psxunit}\KangarooPstChart{yellow}} +% \psframe[linestyle=none,fillstyle=boxfill,fillloopaddy=1](1.61,0)(2.39,800) +% \psboxfill{\psset{unit=0.78\psxunit}\KangarooPstChart{cyan}} +% \psframe[linestyle=none,fillstyle=boxfill,fillloopaddy=1](2.61,0)(3.39,550) +% \psboxfill{\psset{unit=0.78\psxunit}\KangarooPstChart{magenta}} +% \psframe[linestyle=none,fillstyle=boxfill,fillloopaddy=1](3.61,0)(4.39,500) +% \psboxfill{\psset{unit=0.78\psxunit}\KangarooPstChart{green}} +% \psframe[linestyle=none,fillstyle=boxfill,fillloopaddy=1](4.61,0)(5.39,200) +% ^^A % Bottom labels +% \uput{0.2}[270]{0}(1,0){\psscalebox{0.7}{Oceania}} +% \uput{0.2}[270]{0}(2,0){\psscalebox{0.7}{Africa}} +% \uput{0.2}[270]{0}(3,0){\psscalebox{0.7}{Asia}} +% \uput{0.2}[270]{0}(4,0){\psscalebox{0.7}{America}} +% \uput{0.2}[270]{0}(5,0){\psscalebox{0.7}{Europe}} +% ^^A % Frame box around the chart +% \psframe[linestyle=solid](0,0)(6,2000) +% \end{pspicture}} +% \caption{Bar chart generated by PstChart, with bars filled by patterns} +% \label{fig:PstChart} +% \end{figure} +% +% \section{``Dynamic'' tilings} +% +% In some cases, tilings used non \emph{static} tiles, that is to say that the +% \emph{prototile(s)}, even if unique, can have several forms, by instance +% specified by different colors or rotations, not fixed before generation or +% varying each time. +% +% \subsection{Lewthwaite-Pickover-Truchet tiling} +% +% We give here for example the so-called \emph{Truchet} tiling, which much be +% in fact better called \emph{Lewthwaite-Pick\-over-Truchet (LPT)} tiling% +% \footnote{For description of the context, history and references about +% S\'ebastien \textsc{Truchet} and this tiling, see \cite{EsperetGirou98}.}. +% +% The unique prototile is only a square with two opposite circle arcs. +% This tile has obviously two positions, if we rotate it from 90 degrees (see +% the two tiles on the next figure). A \emph{LPT tiling} is a tiling with +% randomly oriented LPT tiles. We can see that even if it is very simple in it +% principle, it draw sophisticated curves with strange properties. +% +% Nevertheless, in the straightforward way \FillPackage{} does not work, +% because the \cs{psboxfill} macro store the content of the tile used in a +% \TeX{} box, which is static. So the calling to the random function is done +% only one time, which explain that only one rotation of the tile is used for +% all the tiling. It's only the one of the two rotations which could differ from +% one drawing to the next one... +% +% ^^A % Truchet (Lewthwaite-Pickover-Truchet) tiling +% ^^A % -------------------------------------------- +% +% \begin{LTXexample}[pos=t] +% ^^A % LPT prototile +% \newcommand{\ProtoTileLPT}{% +% \psset{dimen=middle} +% \begin{pspicture}(1,1) +% \psframe(1,1) +% \psarc(0,0){0.5}{0}{90} +% \psarc(1,1){0.5}{-180}{-90} +% \end{pspicture}} +% +% ^^A % LPT tile +% \newcount\Boolean +% \newcommand{\BasicTileLPT}{% +% ^^A % From random.tex by Donald Arseneau +% \setrannum{\Boolean}{0}{1}% +% \ifnum\Boolean=0 +% \ProtoTileLPT% +% \else +% \psrotateleft{\ProtoTileLPT}% +% \fi} +% +% \ProtoTileLPT\hfill\psrotateleft{\ProtoTileLPT}\hfill +% \psset{unit=0.5} +% \psboxfill{\BasicTileLPT} +% \Tiling{(5,5)} +% \end{LTXexample} +% +% But, for simple cases, there is a solution to this problem using a mixture +% of PSTricks and PostScript programming. Here the PSTricks +% construction \verb+\pscustom{\code{...}}+ allow to insert PostScript code +% inside the \LaTeX{} + PSTricks one. +% +% Programmation is less straightforward, but it has also the advantage to be +% notably faster, as all the tilings operations are done in PostScript, and +% mainly to not be limited by \TeX{} memory (the \TeX{} + PSTricks solution +% I wrote in 1995 for the colored problem was limited to small sizes for this +% reason). Just note also that \cs{pslbrace} and \cs{psrbrace} are two +% PSTricks macros to define and be able to insert the \verb+{+ and \verb+}+ +% characters. +% +% \begin{LTXexample}[pos=t] +% ^^A % LPT prototile +% \newcommand{\ProtoTileLPT}{% +% \psset{dimen=middle} +% \psframe(1,1) +% \psarc(0,0){0.5}{0}{90} +% \psarc(1,1){0.5}{-180}{-90}} +% +% ^^A % Counter to change the random seed +% \newcount\InitCounter +% ^^A % LPT tile +% \newcommand{\BasicTileLPT}{% +% \InitCounter=\the\time +% \pscustom{\code{% +% rand \the\InitCounter\space sub 2 mod 0 eq \pslbrace}} +% \begin{pspicture}(1,1) +% \ProtoTileLPT +% \end{pspicture}% +% \pscustom{\code{\psrbrace \pslbrace}} +% \psrotateleft{\ProtoTileLPT}% +% \pscustom{\code{\psrbrace ifelse}}} +% +% \psset{unit=0.4,linewidth=0.4pt} +% \psboxfill{\BasicTileLPT} +% \Tiling{(15,15)} +% \end{LTXexample} +% +% Using the very surprising fact (see \cite{EsperetGirou98}) that +% coloration of these tiles do not depend of their neighbors (even if it is +% difficult to believe as the opposite seems obvious!) but only of the parity of +% the value of row and column positions, we can directly program in the same way +% a colored version of the LPT tiling. +% +% \setcounter{footnote}{1} +% We have also introduce in the \FillPackage{} code for \emph{tiling} mode two +% new accessible Post\-Script variables, \texttt{row} and +% \texttt{column}\footnotemark, which can be useful in some circonstances, like +% this one. +% +% \begin{LTXexample}[pos=t] +% ^^A % LPT prototile +% \newcommand{\ProtoTileLPT}[2]{% +% \psset{dimen=middle,linestyle=none,fillstyle=solid} +% \psframe[fillcolor=#1](1,1) +% \psset{fillcolor=#2} +% \pswedge(0,0){0.5}{0}{90} \pswedge(1,1){0.5}{-180}{-90}} +% ^^A % Counter to change the random seed +% \newcount\InitCounter +% ^^A % LPT tile +% \newcommand{\BasicTileLPT}[2]{% +% \InitCounter=\the\time +% \pscustom{\code{% +% rand \the\InitCounter\space sub 2 mod 0 eq \pslbrace +% row column add 2 mod 0 eq \pslbrace}} +% \begin{pspicture}(1,1)\ProtoTileLPT{#1}{#2}\end{pspicture}% +% \pscustom{\code{\psrbrace \pslbrace}} +% \ProtoTileLPT{#2}{#1}% +% \pscustom{\code{% +% \psrbrace ifelse \psrbrace \pslbrace row column add 2 mod 0 eq \pslbrace}} +% \psrotateleft{\ProtoTileLPT{#2}{#1}}\pscustom{\code{\psrbrace \pslbrace}} +% \psrotateleft{\ProtoTileLPT{#1}{#2}}\pscustom{\code{\psrbrace ifelse \psrbrace ifelse}}} +% \psboxfill{\BasicTileLPT{red}{yellow}} +% \Tiling{(4,4)}\hfill +% \psset{unit=0.4}\psboxfill{\BasicTileLPT{blue}{cyan}} +% \Tiling{(15,15)} +% \end{LTXexample} +% +% Another classic example is to generate coordinates and numerotation for a +% grid. Of course, it is possible to do it directly in PSTricks using nested +% \cs{multido} commands. It would be clearly easy to program, but, nevertheless, +% for users who have a little knowledge of PostScript programming, this offer +% an alternative which is useful for large cases, because on this way it will +% be notably faster and less computer ressources consuming. +% +% Remember here that the tiling is drawn from left to right, and top to +% bottom, and note that the PostScript variable \texttt{x2} give the total +% number of columns. +% +% \begin{LTXexample}[pos=t] +% ^^A % \Escape will be the \ character +% {\catcode`\!=0\catcode`\\=11!gdef!Escape{\}} +% \newcommand{\ProtoTile}{% +% \Square\pscustom{% +% \moveto(-0.9,0.75) % In PSTricks units +% \code{ /Times-Italic findfont 8 scalefont setfont +% (\Escape() show row 3 string cvs show (,) show +% column 3 string cvs show (\Escape)) show} +% \moveto(-0.5,0.25) % In PSTricks units +% \code{ /Times-Bold findfont 18 scalefont setfont +% 1 0 0 setrgbcolor % Red color +% /center {dup stringwidth pop 2 div neg 0 rmoveto} def +% row 1 sub x2 mul column add 3 string cvs center show}}} +% \psboxfill{\ProtoTile} +% \Tiling{(6,4)} +% \end{LTXexample} +% +% \subsection{A complete example: the Poisson equation} +% +% To finish, we will show a complete real example, a drawing to explain the +% method used to solve the \textsc{Poisson} equation by a domain +% decomposition method, adapted to distributed memory computers. The +% objective is to show the communications required between processes and the +% position of the data to exchange. This code also show some useful and powerful +% technics for PSTricks programming (look specially at the way some higher level +% macros are defined, and how the same object is used to draw the four +% neighbors). +% +%\psset{unit=1cm} +%\newcommand{\Pattern}[1]{% +% \begin{pspicture}(-0.25,-0.25)(0.25,0.25)\rput{*0}{\psdot[dotstyle=#1]} +% \end{pspicture}} +%\newcommand{\West}{\Pattern{o}} \newcommand{\South}{\Pattern{x}} +%\newcommand{\Central}{\Pattern{+}}\newcommand{\North}{\Pattern{square}} +%\newcommand{\East}{\Pattern{triangle}} +%\newcommand{\Cross}{% +% \pspolygon[unit=0.5,linewidth=0.2,linecolor=red](0,0)(0,1)(1,1)(1,2)(2,2)(2,1)% +% (3,1)(3,0)(2,0)(2,-1)(1,-1)(1,0)} +%\newcommand{\StylePosition}[1]{\LARGE\textcolor{red}{\textbf{#1}}} +%\newcommand{\SubDomain}[4]{% +% \psboxfill{#4}\begin{psclip}{\psframe[linestyle=none]#1}% +% \psframe[linestyle=#3](5,5)\psframe[fillstyle=boxfill]#2% +% \end{psclip}} +%\newcommand{\SendArea}[1]{\psframe[fillstyle=solid,fillcolor=cyan]#1} +%\newcommand{\ReceiveData}[2]{% +% \psboxfill{#2}\psframe[fillstyle=solid,fillcolor=yellow,addfillstyle=boxfill]#1}% +%\newcommand{\Neighbor}[2]{% +% \begin{pspicture}(5,5) +% \rput{*0}(2.5,2.5){\StylePosition{#1}} +% \ReceiveData{(0.5,0)(4.5,0.5)}{\Central}\SendArea{(0.5,0.5)(4.5,1)}% +% \SubDomain{(5,2)}{(0.5,0.5)(4.5,3)}{dashed}{#2}% +% \pcarc[arcangle=45,arrows=->](0.5,-1.25)(0.5,0.25)% +% \pcarc[arcangle=45,arrows=->,linestyle=dotted,dotsep=2pt](4.5,0.75)(4.5,-0.75)% +% \end{pspicture}}% +% \psset{dimen=middle,dotscale=2,fillloopadd=2} +%\begin{pspicture}(-5.7,-5.7)(5.7,5.7) +% \rput(0,0){% +% \begin{pspicture}(5,5) +% \ReceiveData{(0,0.5)(0.5,4.5)}{\West} \ReceiveData{(4.5,0.5)(5,4.5)}{\East} +% \ReceiveData{(0.5,4.5)(4.5,5)}{\North}\ReceiveData{(0.5,0)(4.5,0.5)}{\South} +% \SendArea{(0.5,0.5)(1,4.5)}\SendArea{(4,0.5)(4.5,4.5)} +% \SendArea{(0.5,0.5)(4.5,1)}\SendArea{(0.5,4)(4.5,4.5)} +% \SubDomain{(5,5)}{(0.5,0.5)(4.5,4.5)}{solid}{\Central} +% \psline(1,0.5)(1,4.5)\psline(4,0.5)(4,4.5)% +% \rput(1.5,4){\Cross}\rput(2,2){\Cross}% +% \end{pspicture}}% +% \rput(0,5.5){\Neighbor{N}{\North}}\rput{-90}(5.5,0){\Neighbor{E}{\East}}% +% \rput{90}(-5.5,0){\Neighbor{W}{\West}}\rput{180}(0,-5.5){\Neighbor{S}{\South}}% +%\end{pspicture} +% +% \begin{lstlisting} +% \newcommand{\Pattern}[1]{% +% \begin{pspicture}(-0.25,-0.25)(0.25,0.25)\rput{*0}{\psdot[dotstyle=#1]} +% \end{pspicture}} +% \newcommand{\West}{\Pattern{o}} \newcommand{\South}{\Pattern{x}} +% \newcommand{\Central}{\Pattern{+}}\newcommand{\North}{\Pattern{square}} +% \newcommand{\East}{\Pattern{triangle}} +% \newcommand{\Cross}{% +% \pspolygon[unit=0.5,linewidth=0.2,linecolor=red](0,0)(0,1)(1,1)(1,2)(2,2)(2,1) +% (3,1)(3,0)(2,0)(2,-1)(1,-1)(1,0)} +% \newcommand{\StylePosition}[1]{\LARGE\textcolor{red}{\textbf{#1}}} +% \newcommand{\SubDomain}[4]{% +% \psboxfill{#4} +% \begin{psclip}{\psframe[linestyle=none]#1} +% \psframe[linestyle=#3](5,5)\psframe[fillstyle=boxfill]#2 +% \end{psclip}} +% \newcommand{\SendArea}[1]{\psframe[fillstyle=solid,fillcolor=cyan]#1} +% \newcommand{\ReceiveData}[2]{% +% \psboxfill{#2} +% \psframe[fillstyle=solid,fillcolor=yellow,addfillstyle=boxfill]#1} +% \newcommand{\Neighbor}[2]{% +% \begin{pspicture}(5,5) +% \rput{*0}(2.5,2.5){\StylePosition{#1}} +% \ReceiveData{(0.5,0)(4.5,0.5)}{\Central}\SendArea{(0.5,0.5)(4.5,1)} +% \SubDomain{(5,2)}{(0.5,0.5)(4.5,3)}{dashed}{#2}% +% ^^A % Receive and send arrows +% \pcarc[arcangle=45,arrows=->](0.5,-1.25)(0.5,0.25) +% \pcarc[arcangle=45,arrows=->,linestyle=dotted,dotsep=2pt](4.5,0.75)(4.5,-0.75) +% \end{pspicture}} +% \psset{dimen=middle,dotscale=2,fillloopadd=2} +% \begin{pspicture}(-5.7,-5.7)(5.7,5.7) +% ^^A % Central domain +% \rput(0,0){% +% \begin{pspicture}(5,5) +% ^^A % Receive from West, East, North and South +% \ReceiveData{(0,0.5)(0.5,4.5)}{\West} \ReceiveData{(4.5,0.5)(5,4.5)}{\East} +% \ReceiveData{(0.5,4.5)(4.5,5)}{\North}\ReceiveData{(0.5,0)(4.5,0.5)}{\South} +% ^^A % send area for West, East, North and South +% \SendArea{(0.5,0.5)(1,4.5)} \SendArea{(4,0.5)(4.5,4.5)} +% \SendArea{(0.5,0.5)(4.5,1)} \SendArea{(0.5,4)(4.5,4.5)} +% ^^A % Central domain +% \SubDomain{(5,5)}{(0.5,0.5)(4.5,4.5)}{solid}{\Central} +% ^^A % Redraw overlapped linesY +% \psline(1,0.5)(1,4.5) \psline(4,0.5)(4,4.5) +% ^^A % Two crossesY +% \rput(1.5,4){\Cross} \rput(2,2){\Cross} +% \end{pspicture}} +% ^^A % The four neighborsY +% \rput(0,5.5){\Neighbor{N}{\North}} \rput{-90}(5.5,0){\Neighbor{E}{\East}} +% \rput{90}(-5.5,0){\Neighbor{W}{\West}} \rput{180}(0,-5.5){\Neighbor{S}{\South}} +% \end{pspicture} +% \end{lstlisting} +% +% +% +% Bibliography +% \begin{thebibliography}{99} +% \bibitem{PostScript95} Adobe, Systems~Incorporated, \emph{PostScript Language +% Reference Manual}, Addison-Wesley, 2~edition, 1995. +% +% \bibitem{Bolek98} Piotr Bolek, \MP{} and patterns, \emph{\TUB}, Volume~19, +% Number~3, pages 276--283, September 1998, \CTANref{mpattern}. +% +% \bibitem{MLgraphTSI} Emmanuel Chailloux, Guy Cousineau and Asc\'ander +% Su\'arez, Programmation fonctionnelle de graphismes pour la production +% d'illustrations techniques, \emph{Technique et science informatique}, +% Volume~15, Number~7, pages 977--1007, 1996 (in french). +% +% \bibitem{Deledicq97} Andr\'e Deledicq, \emph{Le monde des pavages}, ACL +% \'Editions, 1997 (in french). +% +% \bibitem{EsperetGirou98} Philippe Esperet and Denis Girou, +% Coloriage du pavage dit de Truchet, Cahiers GUTenberg, Number~31, +% pages 5--18, December~1998 (in french). +% +% \bibitem{Girou94} Denis Girou, Pr\'esentation de PSTricks, \emph{Cahiers +% GUTenberg}, Number~16, pages 21--70, February~1994 (in french). +% +% \bibitem{LGC97} Michel Goossens, Sebastian Rahtz and Frank Mittelbach, +% \emph{The \LaTeX{} Graphics Companion}, Addison-Wesley, 2005. +% +% \bibitem{GS87} Branko Gr\"unbaum and Geoffrey Shephard, \emph{Tilings and +% Patterns}, Freeman and Company, 1987. +% +% \bibitem{Hoenig97} Alan Hoenig, \emph{\TeX{} Unbound: \LaTeX{} \& \TeX{} +% Strategies, Fonts, Graphics, and More}, Oxford University Press, 1997. +% +% \bibitem{XYpic} Kristoffer~H. Rose and Ross Moore, \XYpic. Pattern and Tile +% extension, available from \CTAN, 1991-1998, \CTANref{xypic}. +% +% \bibitem{LAAN96} Kees van der Laan, Paradigms: Just a little bit of PostScript, +% \emph{MAPS}, Volume~17, pages 137--150, 1996. +% +% \bibitem{LAAN97} Kees van der Laan, Tiling in PostScript and \MF{} -- Escher's +% wink, \emph{MAPS}, Volume~19, Number~2, pages 39--67, 1997. +% +% \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. +% +% +% \bibitem{voss07} Herbert Vo\ss, PSTricks -- Graphics for \TeX\ and \LaTeX, DANTE/Lehmanns, 4th ed., 2007. +% \bibitem{Wang65} Hao Wang, Games, Logic and Computers, \emph{Scientific +% American}, pages 98--106, November 1965. +% \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-fill.dtx} +% +\usepackage[T1]{fontenc} +\usepackage{lmodern} % For PDF +\usepackage{graphicx} % `graphicx' LaTeX standard package +\usepackage{showexpl} +\usepackage{mflogo} % For the MetaFont and MetaPost logos +\input{random.tex} % Random macros from Donald Arseneau +\usepackage{url} % URLs convenient typesetting +\usepackage{multido} % General loop macro +\usepackage[dvipsnames]{pstricks} % PSTricks with the `color' extension +\usepackage{pst-text} % PSTricks package for character path +\usepackage{pst-grad} % PSTricks package for gradient filling +\usepackage{pst-node} % PSTricks package for nodes +\usepackage[tiling]{pst-fill} % PSTricks package for filling/tiling +% +\AtBeginDocument{% +% \OnlyDescription % comment out for implementation details + \EnableCrossrefs + \CodelineIndex + \RecordChanges} +\AtEndDocument{% + \PrintIndex + \setcounter{IndexColumns}{1} + \PrintChanges} +\hbadness=7000 % Over and under full box warnings +\hfuzz=3pt +\begin{document} + \DocInput{pst-fill.dtx} +\end{document} +%</driver> +% \end{macrocode} +% +% \section{\texttt{pst-fill} \LaTeX{} wrapper} +% +% \begin{macrocode} +%<*latex-wrapper> +\RequirePackage{pstricks} +\ProvidesPackage{pst-fill}[2005/09/13 package wrapper for + pst-fill.tex (hv)] +\DeclareOption{tiling}{\def\PstTiling{true}} +\ProcessOptions\relax +\input{pst-fill.tex} +\ProvidesFile{pst-fill.tex} + [\filedate\space v\fileversion\space `PST-fill' (tvz,dg)] +%</latex-wrapper> +% \end{macrocode} +% +% +% \section{Pst-Fill Package{} code} +% +% \begin{macrocode} +%<*pst-fill> +% \end{macrocode} +% +% \subsection{Preamble} +% +% Who we are. +% +% \begin{macrocode} +\def\fileversion{1.01} +\def\filedate{2007/03/10} +\message{`PST-Fill' v\fileversion, \filedate\space (tvz,dg,hv)} +\csname PSTboxfillLoaded\endcsname +\let\PSTboxfillLoaded\endinput +% \end{macrocode} +% +% Require the main PSTricks package. +% +% \begin{macrocode} +\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi +% \end{macrocode} +% +% interface to the extended `\textsf{keyval}' package. +% +% \begin{macrocode} +\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey\fi +% +% \end{macrocode} +% +% Catcodes changes and defining the family name for xkeyval. +% +% \begin{macrocode} +\edef\PstAtCode{\the\catcode`\@}\catcode`\@=11\relax + +\pst@addfams{pst-fill} +% +% \end{macrocode} +% +% +% \subsection{The size of the box} +% \begin{macro}{pst@@boxfillsize} +% \begin{macrocode} +% +\def\pst@@boxfillsize#1(#2,#3)#4(#5,#6)#7(#8\@nil{% + \begingroup + \ifx\@empty#7\relax + \pst@dima\z@ + \pst@dimb\z@ + \pssetxlength\pst@dimc{#2}% + \pssetylength\pst@dimd{#3}% + \else + \pssetxlength\pst@dima{#2}% + \pssetylength\pst@dimb{#3}% + \pssetxlength\pst@dimc{#5}% + \pssetylength\pst@dimd{#6}% + \fi + \xdef\pst@tempg{% + \pst@dima=\number\pst@dima sp + \pst@dimb=\number\pst@dimb sp + \pst@dimc=\number\pst@dimc sp + \pst@dimd=\number\pst@dimd sp }% + \endgroup + \let\psk@boxfillsize\pst@tempg} +% \end{macrocode} +% \end{macro} +% + +% \subsection{Definition of the parameters} +% +% \begin{macrocode} +\define@key[psset]{pst-fill}{boxfillsize}{% + \def\pst@tempg{#1}\def\pst@temph{auto}% + \ifx\pst@tempg\pst@temph + \let\psk@boxfillsize\relax + \else + \pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil + \fi} +\psset{boxfillsize={(-15cm,-15cm)(15cm,15cm)}} +\define@key[psset]{pst-fill}{boxfillcolor}{\pst@getcolor{#1}\psboxfillcolor} +\psset{boxfillcolor=black}% hv +\define@key[psset]{pst-fill}{boxfillangle}{\pst@getangle{#1}\psk@boxfillangle} +\psset{boxfillangle=0} +\define@key[psset]{pst-fill}{fillsepx}{% + \pst@getlength{#1}\psk@fillsepx} +\define@key[psset]{pst-fill}{fillsepy}{% + \pst@getlength{#1}\psk@fillsepy} +\define@key[psset]{pst-fill}{fillsep}{% + \pst@getlength{#1}\psk@fillsepx% + \let\psk@fillsepy\psk@fillsepx} +\psset{fillsep=2pt} + +\ifx\PstTiling\@undefined + \define@key[psset]{pst-fill}{fillcycle}{\pst@getint{#1}\psk@fillcycle} + \psset{fillcycle=0} +\else + \define@key[psset]{pst-fill}{fillangle}{\pst@getangle{#1}\psk@boxfillangle} + \define@key[psset]{pst-fill}{fillsize}{% + \def\pst@tempg{#1}\def\pst@temph{auto}% + \ifx\pst@tempg\pst@temph\let\psk@boxfillsize\relax + \else\pst@@boxfillsize#1(\z@,\z@)\@empty(\z@,\z@)(\@nil\fi} + \psset{fillsep=0,fillsize=auto} + \define@key[psset]{pst-fill}{fillcyclex}{\pst@getint{#1}\psk@fillcyclex} + \define@key[psset]{pst-fill}{fillcycley}{\pst@getint{#1}\psk@fillcycley} + \define@key[psset]{pst-fill}{fillcycle}{% + \pst@getint{#1}\psk@fillcyclex\let\psk@fillcycley\psk@fillcyclex} + \psset{fillcycle=0} + \define@key[psset]{pst-fill}{fillmovex}{\pst@getlength{#1}\psk@fillmovex} + \define@key[psset]{pst-fill}{fillmovey}{\pst@getlength{#1}\psk@fillmovey} + \define@key[psset]{pst-fill}{fillmove}{% + \pst@getlength{#1}\psk@fillmovex\let\psk@fillmovey\psk@fillmovex} + \psset{fillmove=0pt} + \define@key[psset]{pst-fill}{fillloopaddx}{\pst@getint{#1}\psk@fillloopaddx} + \define@key[psset]{pst-fill}{fillloopaddy}{\pst@getint{#1}\psk@fillloopaddy} + \define@key[psset]{pst-fill}{fillloopadd}{% + \pst@getint{#1}\psk@fillloopaddx\let\psk@fillloopaddy\psk@fillloopaddx} + \psset{fillloopadd=0} +% \end{macrocode} +% +% \begin{macrocode} +% For debugging (to debug, set PstDebug=1) +% we now use the one from pstricks to prevent a clash with package +% pstricks 2004-06-22 +%% \define@key[psset]{pst-fill}{PstDebug}{\pst@getint{#1}\psk@PstDebug} + \psset{PstDebug=0} +\fi +% DG addition end +% \end{macrocode} + +% \subsection{Definition of the fill box} +% \begin{macro}{psboxfill} +% \begin{macrocode} +\newbox\pst@fillbox +\def\psboxfill{\pst@killglue\pst@makebox\psboxfill@i} +\def\psboxfill@i{\setbox\pst@fillbox\box\pst@hbox\ignorespaces} +% \end{macrocode} +% \end{macro} +% \subsection{The main macros} +% +% \begin{macro}{psfs@boxfill} +% \begin{macrocode} +\def\psfs@boxfill{% + \ifvoid\pst@fillbox + \@pstrickserr{Fill box is empty. Use \string\psboxfill\space first.}\@ehpa + \else + \ifx\psk@boxfillsize\relax \pst@AutoBoxFill + \else\pst@ManualBoxFill\fi + \fi} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{pst@ManualBoxFill} +% \begin{macrocode} +\def\pst@ManualBoxFill{% + \leavevmode + \begingroup + \pst@FlushCode + \begin@psclip + \pstVerb{clip}% + \expandafter\pst@AddFillBox\psk@boxfillsize + \end@psclip + \endgroup} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{pst@FlushCode} +% \begin{macrocode} +\def\pst@FlushCode{% + \pst@Verb{% + /mtrxc CM def + CP CP T + \tx@STV + \psk@origin + \psk@swapaxes + \pst@newpath + \pst@code + mtrxc setmatrix + moveto + 0 setgray}% + \gdef\pst@code{}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{pst@AddFillBox} +% \begin{macrocode} +\def\pst@AddFillBox#1 #2 #3 #4 {% + \begingroup + \setbox\pst@fillbox=\vbox{% + \hbox{\unhcopy\pst@fillbox\kern\psk@fillsepx\p@}% + \vskip\psk@fillsepy\p@}% + \psk@boxfillsize + \pst@cnta=\pst@dimc + \advance\pst@cnta-\pst@dima + \divide\pst@cnta\wd\pst@fillbox + \pst@cntb=\pst@dimd + \advance\pst@cntb-\pst@dimb + \pst@dimd=\ht\pst@fillbox + \divide\pst@cntb\pst@dimd + \def\pst@tempa{% + \pst@tempg + \copy\pst@fillbox + \advance\pst@cntc\@ne + \ifnum\pst@cntc<\pst@cntd\expandafter\pst@tempa\fi}% + \let\pst@tempg\relax + \pst@cntc-\tw@ + \pst@cntd\pst@cnta + \setbox\pst@fillbox=\hbox to \z@{% + \kern\pst@dima + \kern-\wd\pst@fillbox + \pst@tempa + \hss}% + \pst@cntd\pst@cntb +%% DG modification begin - Dec. 11, 1997 - Patch 2 + \ifx\PstTiling\@undefined + \ifnum\psk@fillcycle=\z@\pst@ManualFillCycle\fi + \else + \ifnum\psk@fillcyclex=\z@\pst@ManualFillCycle\fi + \fi +%% DG modification end + \global\setbox\pst@boxg=\vbox to\z@{% + \offinterlineskip + \vss + \pst@tempa + \vskip\pst@dimb}% + \endgroup + \setbox\pst@fillbox\box\pst@boxg + \pst@rotate\psk@boxfillangle\pst@fillbox + \box\pst@fillbox} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{pst@ManualFillCycle} +% \begin{macrocode} +\def\pst@ManualFillCycle{% + \ifx\PstTiling\@undefined + \pst@cntg=\psk@fillcycle + \else + \pst@cntg=\psk@fillcyclex + \fi + \pst@dimg=\wd\pst@fillbox + \ifnum\pst@cntg=\z@ + \else + \divide\pst@dimg\pst@cntg + \fi + \ifnum\pst@cntg<\z@\pst@cntg=-\pst@cntg\fi + \advance\pst@cntg\m@ne + \pst@cnth=\pst@cntg + \def\pst@tempg{% + \ifnum\pst@cnth<\pst@cntg\advance\pst@cnth\@ne\else\pst@cnth\z@\fi + \moveright\pst@cnth\pst@dimg}} +% \end{macrocode} +% \end{macro} +% +%% Auto box fill: !! Fix dictionary +% +% \subsection{The PostScript subroutines} +% +% \begin{macrocode} +%% DG addition begin - Apr. 8, 1997 and Dec. 1997 - Patch 2 +\ifx\PstTiling\@undefined +\pst@def{AutoFillCycle}<% + /c ED + /n 0 def + /s { + /x x w c div n mul add def + /n n c abs 1 sub lt { n 1 add } { 0 } ifelse def + } def> + +\pst@def{BoxFill}<% + gsave + gsave \tx@STV CM grestore dtransform CM idtransform + abs /h ED abs /w ED + pathbbox + h div round 2 add cvi /y2 ED + w div round 2 add cvi /x2 ED + h div round 2 sub cvi /y1 ED + w div round 2 sub cvi /x1 ED + /y2 y2 y1 sub def + /x2 x2 x1 sub def + CP + y1 h mul sub neg /y1 ED + x1 w mul sub neg /x1 ED + clip + y2 { + /x x1 def + s + x2 { + save CP x y1 +%% patch 4 hv -------------- + \ifx\VTeXversion\undefined + \else +%%============ mv: 09-10-01 ??? this is likely to be a right change + neg +%%============ + \fi +%% end patch 4 +T moveto Box restore + /x x w add def + } repeat + /y1 y1 h add def + } repeat + % Next line not useful... To see that, suppress clipping (DG) + CP x y1 T moveto Box + currentpoint currentfont grestore setfont moveto> +\else +%% DG modification begin - Apr. 8, 1997 and Nov. / Dec. 1997 - Patch 2 +\pst@def{AutoFillCycleX}<% + /cX ED + /nX 0 def + /CycleX { + /x x w cX div nX mul add def + /nX nX cX abs 1 sub lt { nX 1 add } { 0 } ifelse def + } def> +\pst@def{AutoFillCycleY}<% + /cY ED + /mY 0 def + /nY 0 def + /CycleY { + /y1 y1 h cY div mY mul sub def + nY cY abs 1 sub lt { /nY nY 1 add def /mY 1 def } + { /nY 0 def /mY cY abs 1 sub neg def } ifelse + } def> + +\pst@def{BoxFill}<% + gsave + gsave \tx@STV CM grestore dtransform CM idtransform + abs /h ED abs /w ED + pathbbox + h div round 2 add cvi /y2 ED + w div round 2 add cvi /x2 ED + h div round 2 sub cvi /y1 ED + w div round 2 sub cvi /x1 ED + /CoefLoopX 0 def + /CoefLoopY 0 def + /CoefMoveX 0 def + /CoefMoveY 0 def + \psk@boxfillangle\space 0 ne {/CoefLoopX 8 def /CoefLoopY 8 def} if + \psk@fillcyclex\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if + \psk@fillcycley\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if + \psk@fillmovex\space 0 ne + {/CoefLoopX CoefLoopX 2 add def + \psk@fillmovex\space 0 gt {/CoefMoveX CoefLoopX def} + {/CoefMoveX CoefLoopX neg def} ifelse} if + \psk@fillmovey\space 0 ne + {/CoefLoopY CoefLoopY 2 add def + \psk@fillmovey\space 0 gt {/CoefMoveY CoefLoopY def} + {/CoefMoveY CoefLoopY neg def} ifelse} if + \psk@fillsepx\space 0 ne {/CoefLoopX CoefLoopX 1 add def} if + \psk@fillsepy\space 0 ne {/CoefLoopY CoefLoopY 1 add def} if + /CoefLoopX CoefLoopX \psk@fillloopaddx\space add def + /CoefLoopY CoefLoopY \psk@fillloopaddy\space add def + /x2 x2 x1 sub 4 sub CoefLoopX 2 mul add def + /y2 y2 y1 sub 4 sub CoefLoopY 2 mul add def +%% We must fix the origin of tiling, as it must not vary according other stuff +%% in the page! + w x1 CoefLoopX add CoefMoveX add mul + h y1 y2 add 1 sub CoefLoopY sub CoefMoveY sub mul moveto + CP + y1 h mul sub neg /y1 ED + x1 w mul sub neg /x1 ED +%% hv 2004-06-22 to prevent clash with pst-gr3d +%% \psk@PstDebug 0 eq {clip} if + \Pst@Debug 0 eq {clip} if +%% end hv + \psk@fillmovex\space \psk@fillmovey + gsave \tx@STV CM grestore dtransform CM idtransform + /hmove ED /wmove ED + /row 0 def + y2 { + /row row 1 add def + /column 0 def + /x x1 def + CycleX + save + x2 { + /column column 1 add def + CycleY + save CP x y1 +%% patch 4 hv -------------- + \ifx\VTeXversion\undefined + \else +%%============ mv: 09-10-01 ??? this is likely to be a right change + neg +%%============ + \fi + T moveto Box restore + /x x w add def + 0 hmove translate + } repeat + restore + /y1 y1 h add def + wmove 0 translate + } repeat + currentpoint currentfont grestore setfont moveto> +\fi +% \end{macrocode} + +% \begin{macrocode} +\def\pst@AutoBoxFill{% + \leavevmode + \begingroup + \pst@stroke + \pst@FlushCode + \pst@Verb{\psk@boxfillangle\space \tx@RotBegin}% + \pstVerb{\pst@dict /Box \pslbrace end}% + \ifx\PstTiling\@undefined + \else + \ifx\pst@tempa\@undefined % Undefined for instance for \pscharpath + \else\ifx\pst@tempa\@empty\else + \def\pst@temph{0}% + \ifx\pst@tempa\pst@temph + \else + \pstVerb{/TR {pop pop currentpoint translate \pst@tempa\space translate } def}% + \fi + \fi\fi + \fi + \hbox to \z@{\vbox to\z@{\vss\copy\pst@fillbox\vskip-\dp\pst@fillbox}\hss}% + \ifx\PstTiling\@undefined + \pstVerb{% + tx@Dict begin \psrbrace def + \ifnum\psk@fillcycle=\z@ + /s {} def + \else + \psk@fillcycle \tx@AutoFillCycle + \fi + \pst@number{\wd\pst@fillbox}% + \psk@fillsepx\space add + \pst@number{\ht\pst@fillbox}% + \pst@number{\dp\pst@fillbox}% + \psk@fillsepy\space add add + \tx@BoxFill + end}% + \else + \pstVerb{% + tx@Dict begin \psrbrace def + \ifnum\psk@fillcyclex=\z@ + /CycleX {} def + \else + \psk@fillcyclex\space \tx@AutoFillCycleX + \fi + \ifnum\psk@fillcycley=\z@ + /CycleY {} def + \else + \psk@fillcycley\space \tx@AutoFillCycleY + \fi + \pst@number{\wd\pst@fillbox}% + \psk@fillsepx\space add + \pst@number{\ht\pst@fillbox}% + \pst@number{\dp\pst@fillbox}% + \psk@fillsepy\space add add + \tx@BoxFill + end}% + \fi + \pst@Verb{\tx@RotEnd}% + \endgroup} +% \end{macrocode} +% \subsection{Closing} +% +% Catcodes restoration. +% +% \begin{macrocode} +\catcode`\@=\PstAtCode\relax +% \end{macrocode} +% +% \begin{macrocode} +%</pst-fill> +% \end{macrocode} +% +% \Finale +% +\endinput +%% +%% End of file `pst-fill.dtx' diff --git a/graphics/pstricks/contrib/pst-fill/pst-fill.ins b/graphics/pstricks/contrib/pst-fill/pst-fill.ins new file mode 100644 index 0000000000..67c9404c2f --- /dev/null +++ b/graphics/pstricks/contrib/pst-fill/pst-fill.ins @@ -0,0 +1,37 @@ +%% `pst-fill.ins' +%% +%% Docstrip installation instruction file for docstyle `pst-fill' +%% +%% Herbert Voss <voss@pstricks.de> +%% +%% 2006-11-06 +%% +\def\batchfile{pst-fill.ins} +\input docstrip.tex +\keepsilent +\Msg{*** Generating the `pst-fill' package ***} +\askforoverwritefalse +\generate{\file{pst-fill.tex}{\from{pst-fill.dtx}{pst-fill}}} +\generate{\file{pst-fill.sty}{\from{pst-fill.dtx}{latex-wrapper}}} + +\ifToplevel{% +\Msg{***********************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the files} +\Msg{* pst-fill.sty and pst-fill.tex in a directory/folder searched by TeX.} +\Msg{*} +\Msg{* To produce the documentation, run the file `pst-fill.dtx'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* If you require the commented code, desactivating the} +\Msg{* OnlyDescription macro, you must recompile, execute:} +\Msg{* `makeindex -s gind.ist pst-fill'} +\Msg{* `makeindex -s gglo.ist -o pst-fill.gls pst-fill.glo'} +\Msg{* and recompile.} +\Msg{*} +\Msg{***********************************************************} +} + +\endinput +%% +%% End of file `pst-fill.ins' diff --git a/graphics/pstricks/contrib/pst-fill/pst-fill.pdf b/graphics/pstricks/contrib/pst-fill/pst-fill.pdf Binary files differnew file mode 100644 index 0000000000..f09defc07e --- /dev/null +++ b/graphics/pstricks/contrib/pst-fill/pst-fill.pdf |