diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/pstricks/voss/bsp109.tex')
-rw-r--r-- | Master/texmf-dist/doc/generic/pstricks/voss/bsp109.tex | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/pstricks/voss/bsp109.tex b/Master/texmf-dist/doc/generic/pstricks/voss/bsp109.tex new file mode 100644 index 00000000000..bcd1a0a56ce --- /dev/null +++ b/Master/texmf-dist/doc/generic/pstricks/voss/bsp109.tex @@ -0,0 +1,229 @@ +\documentclass[a4paper]{article} + +\usepackage{lscape} +\usepackage{pstricks} +\usepackage{pst-grad} +\usepackage{pst-key} +\usepackage{multido} + +\makeatletter + +% "pspicture" environment or not? +\newif\ifPst@PstPicture +\define@key{psset}{PstPicture}[true]{% +\@nameuse{Pst@PstPicture#1}} + +% Intervals to show? +\newif\ifPst@GanttChartShowIntervals +\define@key{psset}{ChartShowIntervals}[true]{% +\@nameuse{Pst@GanttChartShowIntervals#1}} + +% Style for the tasks +\define@key{psset}{TaskStyle}{\def\psk@GanttTaskStyle{#1}} + +% Name for unit interval +\define@key{psset}{ChartUnitIntervalName}{% +\def\psk@GanttChartUnitIntervalName{#1}} + +% Name for basic unit +\define@key{psset}{ChartUnitBasicIntervalName}{% +\def\psk@GanttChartUnitBasicIntervalName{#1}} + +% Unit interval for the tasks (7 for a week, 30 for a month, etc.) +% Warning: define it before "TaskUnitType"! +\define@key{psset}{TaskUnitIntervalValue}{% +\pst@cntg=#1\relax +\edef\psk@GanttTaskUnitIntervalValue{\the\pst@cntg}} + +% Unit type for the tasks (UnitIntervalName or UnitBasicIntervalName) +\define@key{psset}{TaskUnitType}{% +\edef\psk@GanttTaskUnitValue{#1}% +% Validation of the parameter +\ifx\psk@GanttTaskUnitValue\psk@GanttChartUnitIntervalName + \edef\psk@GanttTaskUnitValue{\psk@GanttTaskUnitIntervalValue}% +\else + \ifx\psk@GanttTaskUnitValue\psk@GanttChartUnitBasicIntervalName + \def\psk@GanttTaskUnitValue{1}% + \else + {\@pstrickserr{GanttTaskUnitType must be `\psk@GanttChartUnitIntervalName' + or `\psk@GanttChartUnitBasicIntervalName' + (and not `\psk@GanttTaskUnitValue')}\@eha}% + \fi +\fi} + +% Outside label for the tasks +\define@key{psset}{TaskOutsideLabel}{\def\psk@GanttTaskOutsideLabel{#1}} + +% Inside label for the tasks +\define@key{psset}{TaskInsideLabel}{\def\psk@GanttTaskInsideLabel{#1}} + +% Maximum outside size label for the tasks (in unit TaskUnitType !) +\define@key{psset}{TaskOutsideLabelMaxSize}{% +\pst@cntg=#1\relax +\edef\psk@GanttTaskOutsideLabelMaxSize{\the\pst@cntg}} + +% Default values +% -------------- +% pspicture environment, don't show intervals, default task style, +% unit for tasks is a week (so 7 days), no outside and inside labels +\setkeys{psset}{% +PstPicture=true,ChartShowIntervals=false,TaskStyle=TaskStyleDefault, +ChartUnitIntervalName=Week,ChartUnitBasicIntervalName=Day, +TaskUnitIntervalValue=7,TaskUnitType=Week, +TaskOutsideLabel=,TaskInsideLabel=,TaskOutsideLabelMaxSize=0} + +\newpsstyle{TaskStyleDefault}{fillstyle=solid,fillcolor=yellow} + +% The environment \PstGanttChart +% ------------------------------ + +% Syntax: \PstGanttChart[parameters]{Number of tasks}{Number of days} +\def\PstGanttChart{\@ifnextchar[\PstGanttChart@i{\PstGanttChart@i[]}} + +\def\PstGanttChart@i[#1]#2#3{% +\begingroup +\setkeys{psset}{unit=0.1,#1} % Affectation of local parameters +% +\ifPst@PstPicture % "pspicture" environment + \pst@cnta=\psk@GanttTaskOutsideLabelMaxSize + \multiply\pst@cnta\psk@GanttTaskUnitValue + % + \pst@cntb=#2 + \multiply\pst@cntb by 5 + \advance\pst@cntb\@ne + % + \pst@cntc=#3 + \multiply\pst@cntc\psk@GanttTaskUnitValue + \advance\pst@cntc\tw@ + % + \ifPst@GanttChartShowIntervals + \pspicture(-\pst@cnta,-\pst@cntb)(\pst@cntc,2) + \else + \pspicture(-\pst@cnta,-\pst@cntb)(\pst@cntc,0) + \fi +\fi +\psframe(0,-\pst@cntb)(\pst@cntc,0) +% +\ifPst@GanttChartShowIntervals + % We will show the intervals + \pst@cnta=#3 + \multiply\pst@cnta\psk@GanttTaskUnitValue + \divide\pst@cnta\psk@GanttTaskUnitIntervalValue + \advance\pst@cnta\@ne + % + \pst@cntb=#2 + \multiply\pst@cntb by 5 + \advance\pst@cntb\@ne + % + \pst@dima=\psk@GanttTaskUnitIntervalValue pt + \divide\pst@dima\tw@ + \advance\pst@dima\@ne pt + \pst@dimtonum{\pst@dima}{\pst@tempa} + % + \multido{\iInterval=1+1,\iIntervalPos=1+\psk@GanttTaskUnitIntervalValue, + \nIntervalPos=\pst@tempa+\psk@GanttTaskUnitIntervalValue.0}{\pst@cnta}{% + \ifnum\iInterval=\pst@cnta + \psline(\iIntervalPos,0)(\iIntervalPos,1.5) + \psline[linestyle=dotted](\iIntervalPos,-\pst@cntb)(\iIntervalPos,0) + \else + \rput(\nIntervalPos,1){\psk@GanttChartUnitIntervalName\space\iInterval} + \psline(\iIntervalPos,0)(\iIntervalPos,1.5) + \psline[linestyle=dotted](\iIntervalPos,-\pst@cntb)(\iIntervalPos,0) + \fi} +\fi} + +\def\endPstGanttChart{% +\ifPst@PstPicture + \endpspicture % End of "pspicture" environment +\fi +\endgroup} + +% The macro \PstGanttTask +% ----------------------- + +\newcount\pst@GanttTaskCnt +\pst@GanttTaskCnt=\z@ + +% Syntax: \PstGanttTask[parameters]{Start}{Length} +\def\PstGanttTask{\@ifnextchar[\PstGanttTask@i{\PstGanttTask@i[]}} + +\def\PstGanttTask@i[#1]#2#3{ +\advance\pst@GanttTaskCnt\m@ne +\begingroup +\setkeys{psset}{#1}% % Affectation of local parameters +% Frame +\pst@cnta=\psk@GanttTaskUnitValue +\multiply\pst@cnta by #2 +\advance\pst@cnta\@ne +% +\pst@cntb=\psk@GanttTaskUnitValue +\multiply\pst@cntb by #3 +\advance\pst@cntb\pst@cnta +% +\pst@cntc=\pst@GanttTaskCnt +\multiply\pst@cntc by 5 +% +\pst@cntd=\pst@cntc +\advance\pst@cntd by 4 +% +\psframe[style=\psk@GanttTaskStyle](\pst@cnta,\pst@cntc)(\pst@cntb,\pst@cntd) +% Inside label +\ifx\psk@GanttTaskInsideLabel\empty +\else + \pst@dima=\pst@cnta pt + \advance\pst@dima\pst@cntb pt + \divide\pst@dima\tw@ + \pst@dimtonum{\pst@dima}{\pst@tempa} + % + \pst@dimb=\pst@cntc pt + \advance\pst@dimb\pst@cntd pt + \divide\pst@dimb\tw@ + \pst@dimtonum{\pst@dimb}{\pst@tempb} + % + \rput(\pst@tempa,\pst@tempb){\psk@GanttTaskInsideLabel} +\fi +% Outside label +\ifx\psk@GanttTaskOutsideLabel\empty +\else + \pst@dimb=\pst@cntc pt + \advance\pst@dimb\pst@cntd pt + \divide\pst@dimb\tw@ + \pst@dimtonum{\pst@dimb}{\pst@tempb} + \rput[r](-1.5,\pst@tempb){\psk@GanttTaskOutsideLabel} +\fi +\endgroup} + +\makeatother + + +\begin{document} + +\definecolor{LightCyan} {rgb}{0.88,1.,1.} +\definecolor{Orange} {rgb}{1.,0.65,0.} +\definecolor{PaleGreen} {rgb}{0.6,0.98,0.6} +\definecolor{Pink} {rgb}{1.,0.75,0.8} + +\psset{gradmidpoint=0,fillstyle=gradient,gradbegin=LightCyan,gradend=white} +\newpsstyle{TaskStyleA}{gradbegin=cyan,gradend=blue} +\newpsstyle{TaskStyleB}{gradbegin=red,gradend=Pink} +\newpsstyle{TaskStyleC}{gradbegin=yellow,gradend=Orange} +\newpsstyle{TaskStyleD}{gradbegin=green,gradend=PaleGreen} + +\begin{landscape} +\begin{PstGanttChart}[yunit=2.5,xunit=3.5,ChartUnitIntervalName=Semaine, + ChartUnitBasicIntervalName=Jour,TaskUnitType=Jour, + TaskOutsideLabelMaxSize=14,ChartShowIntervals]{8}{43} + \psset{gradangle=90,TaskStyle=TaskStyleA} + \PstGanttTask[TaskOutsideLabel={\'Etude}]{0}{10} + \PstGanttTask[TaskOutsideLabel={R\'edaction dossier}]{6}{7} + \PstGanttTask[TaskOutsideLabel={Relecture et corrections}]{14}{2} + \PstGanttTask[TaskOutsideLabel={Soumission},TaskStyle=TaskStyleB]{17}{1} + \psset{TaskStyle=TaskStyleC} + \PstGanttTask[TaskOutsideLabel={R\'ealisation}]{25}{14} + \PstGanttTask[TaskOutsideLabel={Tests}]{35}{6} + \PstGanttTask[TaskOutsideLabel={V\'erification}]{39}{3} + \PstGanttTask[TaskOutsideLabel={Recette},TaskStyle=TaskStyleD]{42}{1} +\end{PstGanttChart} +\end{landscape} + +\end{document} |