diff --git a/base/pdata.sty b/base/pdata.sty index 11d854a..933bee2 100644 --- a/base/pdata.sty +++ b/base/pdata.sty @@ -74,6 +74,140 @@ \tab@line} \def\prop@gen@compactht{false} \define@key{prop@gen}{compactht}[true]{\def\prop@gen@compactht{#1}} +\newcommand\deliv@error{\PackageError{proposal} +{To use use deliverables, you have to specify the option 'deliverables'}} +\newenvironment{wpdelivs}{\begin{wp@delivs}}{\end{wp@delivs}} +\newenvironment{wp@delivs} +{\ifdelivs\textbf\deliv@legend@delivs:\\[-3ex]% +\begin{compactdesc}\else\deliv@error\fi} +{\ifdelivs\end{compactdesc}\fi} +\newcommand\deliv@legend@delivs{Deliverables} +\newenvironment{wadelivs} +{\textbf\deliv@legend@delivs:\\[-3ex]\begin{wp@delivs}} +{\end{wp@delivs}} +\newcommand\lec[1]{\strut\hfil\strut\null\nobreak\hfill\hbox{$\leadsto$#1}\par} +\newcommand\deliv@label[1]{D{#1}} +\newcommand\delivref[2]{\pdataRef{deliv}{#1@#2}{label}} +\newcommand\localdelivref[1]{\delivref{\wp@id}{#1}} +\newcommand\delivtref[2]{\delivref{#1}{#2}: \pdataRefFB{deliv}{#1@#2}{short}{title}} +\newcommand\localdelivtref[1]{\delivtref{\wp@id}{#1}} +\define@key{deliv}{id}{\def\deliv@id{#1}} +\define@key{deliv}{due}{\def\deliv@due{#1}} +\define@key{deliv}{dissem}{\def\deliv@dissem{#1}} +\define@key{deliv}{nature}{\def\deliv@nature{#1}} +\define@key{deliv}{miles}{\def\deliv@miles{#1}} +\define@key{deliv}{short}{\def\deliv@short{#1}} +\define@key{deliv}{lead}{\def\deliv@lead{#1}} +\define@key{deliv}{issue}{\def\deliv@issue{#1}} +\newcounter{deliverable} +\newcommand{\wpg@deliv}[3]{% keys, title, type +\stepcounter{deliverable} +\let\deliv@miles=\relax% clean state +\def\@type{#3}\def\@wp{wp}% set up ifx +\def\wpg@id{\csname #3@id\endcsname} +\setkeys{deliv}{#1}\stepcounter{deliv}% set state +\ifx\@type\@wp\def\current@label{\deliv@label{\ifwork@areas\thewa.\fi\thewp.\thedeliv}} +\else\def\current@label{\deliv@label{\thewa.\thedeliv}}\fi +\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{label}{\current@label} +\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{title}{#2} +\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{page}{\thepage}% +\@ifundefined{deliv@short} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{short}{#2}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{short}{\deliv@short}} +\@ifundefined{deliv@nature} +{\protect\G@refundefinedtrue\@latex@warning{key 'nature' for Deliv \wpg@id undefined}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{nature}{\deliv@nature}} +\@ifundefined{deliv@dissem} +{\protect\G@refundefinedtrue\@latex@warning{key 'dissem' for Deliv \wpg@id undefined}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{dissem}{\deliv@dissem}} +\@ifundefined{deliv@lead} +{\protect\G@refundefinedtrue\@latex@warning{key 'lead' for Deliv \wpg@id undefined}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{lead}{\deliv@lead}} +\@ifundefined{deliv@due}{}{% +\@ifundefined{deliv@issue}{}{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{issue}{\deliv@issue}} +\@for\@I:=\deliv@due\do{\protected@write\wpg@delivs{}{\string\deliverable% +{\ifnum\@I<10 0\@I\else\@I\fi}% sort key +{\@I}% due date +{\current@label}% label +{\@ifundefined{deliv@id}{??}{\taskin\deliv@id\wpg@id}}% id +{\@ifundefined{deliv@dissem}{??}{\deliv@dissem}}% dissemination level +{\@ifundefined{deliv@nature}{??}{\deliv@nature}}% nature +{#2} +{\ifx\@type\@wp{WP\ifwork@areas\thewa.\fi\thewp}\else{WA\thewa}\fi}%WP +{\@ifundefined{deliv@lead}{??}{\string\site{\deliv@lead}}}}}}% lead +\item[\current@label\ (% +\delivs@legend@due: \@ifundefined{deliv@due}{??}{\deliv@due}, +\delivs@legend@nature: \@ifundefined{deliv@nature}{??}{\deliv@nature}, +\delivs@legend@dissem: \@ifundefined{deliv@dissem}{??}{\deliv@dissem}, +\delivs@legend@lead: \@ifundefined{deliv@lead}{??}{\site{\deliv@lead}})] + \pdata@target{deliv}{\taskin\deliv@id\wpg@id}{\textit{#2}} +\@ifundefined{deliv@miles}{}{% print the milestones and update their deliverables +\let\m@sep=\relax% do not print the separator the first time round +\lec{\@for\@I:=\deliv@miles\do{% Iterate over the milestones mentioned +\m@sep\pdataRef{mile}{\@I}{label}% print the milestone reference +\let\m@sep=,}}%set the separator for the next times +\def\d@sep{,} + \@for\@I:=\deliv@miles\do{% Iterate over the milestones mentioned + \expandafter\ifx\csname\@I delivs\endcsname\relax% Check that the miles@delivs is empty + {\expandafter\xdef\csname\@I delivs\endcsname{\wpg@id @\deliv@id}}% if so, skip the separator + \else\expandafter\xdef\csname\@I delivs\endcsname%if not add it + {\csname\@I delivs\endcsname\d@sep\wpg@id @\deliv@id}\fi}}} +\newenvironment{wadeliv}[2][]{\ifdelivs\wpg@deliv{#1}{#2}{wa}\else\deliv@error\fi}{} +\newenvironment{wpdeliv}[2][]{\ifdelivs\wpg@deliv{#1}{#2}{wp}\else\deliv@error\fi}{} +\newcommand\milestone@label[1]{M{#1}} +\newcommand\mileref[1]{\pdataRef{mile}{#1}{label}} +\newcommand\miletref[1]{\mileref{#1}: \pdataRefFB{mile}{#1}{short}{title}} +\newcounter{milestone} +\define@key{milestone}{id}{\gdef\mile@id{#1}} +\define@key{milestone}{month}{\gdef\mile@month{#1}} +\newcommand\milestone[3][]{% +\ifdelivs% +\setkeys{milestone}{#1}\stepcounter{milestone}% +\pdata@def{mile}\mile@id{label}{\milestone@label{\themilestone}}% +\pdata@def{mile}\mile@id{month}{\mile@month}% +\pdata@def{mile}\mile@id{title}{#2}% +\pdata@def{mile}\mile@id{description}{#3}% +\@ifundefined{mile@stones}% +{\xdef\mile@stones{\mile@id}}% +{\xdef\mile@stones{\mile@stones,\mile@id}}% +\@milestone{\mile@id}{#2}{#3}% presentation +\else\deliv@error\fi} +\newcommand\@milestone[3]{% id, title, description +\item \textbf{\miles@legend@milestone\xspace\pdata@target{mile}\mile@id{\pdataref{mile}{#1}{label}} +(\miles@legend@month \pdataref{mile}\mile@id{month}) +\textbf{#2}} #3} +\newcommand\miles@legend@month{Month} +\newcommand\miles@legend@milestone{Milestone} +\newenvironment{milestones}% +{\ifdelivs\begin{@milestones}\else\deliv@error\fi} +{\ifdelivs\pdata@def{all}{mile}{ids}{\mile@stones}% +\pdata@def{all}{mile}{count}{\themilestone}% +\end{@milestones}\fi} +\newenvironment{@milestones}{\begin{enumerate}}{\end{enumerate}} +\newcommand{\deliverable}[9]{\pdataRef{deliv}{#4}{label} \\\hline}%sortkey,due,label,id,title,type,level,lead +\newenvironment{deliverables}[1]{\ifdelivs\begin{longtable}{|l|p{#1}|l|l|l|l|l|}\hline% +\#&\textbf{\delivs@legend@name}&% +\textbf{\delivs@legend@wp}&% +\textbf{\delivs@legend@lead}&% +\textbf{\delivs@legend@nature}&% +\textbf{\delivs@legend@level}&% +\textbf{\delivs@legend@due}\\\hline\hline% +\endhead% +\else\deliv@error\fi} +{\ifdelivs\end{longtable}\fi} +\newcommand\delivs@legend@name{Deliverable name} +\newcommand\delivs@legend@wp{WP} +\newcommand\delivs@legend@nature{Type} +\newcommand\delivs@legend@level{Level} +\newcommand\delivs@legend@due{Due} +\newcommand\delivs@legend@dissem{Dissem.} +\newcommand\delivs@legend@lead{Lead} +\newcommand{\inputdelivs}[1]{% +\begin{deliverables}{#1}% +\IfFileExists{\jobname.deliverables}% +{\input{\jobname.deliverables}}% +{\IfFileExists{\jobname.delivs}{\input{\jobname.delivs}}{}} +\end{deliverables}} \newif\ifwork@areas\work@areastrue \DeclareOption{noworkareas}{\work@areasfalse} \ProcessOptions diff --git a/base/proposal.cls b/base/proposal.cls index 753747d..9d4b57b 100644 --- a/base/proposal.cls +++ b/base/proposal.cls @@ -318,6 +318,79 @@ \pdata@def{all}{milestones}{count}{\themilestone} \fi \ifdelivs\closeout\wpg@delivs\fi} +\newenvironment{tasklist} +{\begin{compactenum}}{\end{compactenum}} +\newcommand\task@label[2]{\textbf{T#1.#2}} +\define@key{task}{id}{\def\task@id{#1}\@dmp{id=#1}} +\define@key{task}{wphases}{\def\task@wphases{#1}\@dmp{wphases=#1}} +\define@key{task}{requires}{\@requires\task@id{#1}\@dmp{req=#1}} +\define@key{task}{title}{\def\task@title{#1}} +\define@key{task}{lead}{\def\task@lead{#1}} +\define@key{task}{partners}{\def\task@partners{#1}} +\define@key{task}{PM}{\def\task@PM{#1}} +\define@key{task}{issue}{\def\task@issue{#1}} +\def\task@set#1{\edef\task@id{task\thetask@all} +\def\task@wphases{0-0}\def\task@partners{}\def\task@lead{}\def\task@PM{}\def\task@title{} +\setkeys{task}{#1}} +\def\task@post@title@space{\;} +\newcounter{alltasks} +\def\task@post@title@space{\quad} +\newcommand\task@legend@partners{Sites: } +\newcommand\task@legend@PM{PM} +\newenvironment{task}[1][]% +{\stepcounter{alltasks}% +\@task{#1}\item[\pdata@target{task}{\taskin\task@id\wp@id}{\task@label\thewp\thetask@wp}]% +\ifx\task@title\@empty\textbf\task@title\fi\task@post@title@space% +\def\@initial{0-0}\ifx\task@wphases\@initial\else% +\let\@@sep=\relax\@for\@I:=\task@wphases% +\do{\decode@wphase\@I% +\@@sep\show@wphase\wphase@start\wphase@end\wphase@force% +\let\@@sep=\sep@wphases}% +\fi% initial +\hfill% +\ifsubmit\else\ifx\task@PM\@empty\else\task@PM~\task@legend@PM;\fi\fi% +\ifx\task@lead\@empty\else\ \task@legend@partners\site\task@lead~(\legend@lead)\fi% +\@for\@I:=\task@partners\do{, \site\@I}\\% +\ignorespaces} +{\medskip} +\newcommand\month@label[1]{M#1} +\newcommand\show@wphase[3]{\edef\@test{#3}\def\@one{1}% +\month@label{#1}-\month@label{#2}% +\ifx\@test\@empty\else\ifx\@test\@one\else @#3\fi\fi} +\newcommand\sep@wphases{; } +\newcommand\legend@partners{Partners} +\newcommand\legend@lead{lead} +\newcommand\task@label@long{Task} +\newcounter{task@all}\newcounter{task@wp}[wp] +\newcount\task@@end +\def\@task#1{\stepcounter{task@all}\stepcounter{task@wp}% +\task@set{#1}% +\pdata@def{task}{\taskin\task@id\wp@id}{title}{\task@title} +\pdata@def{task}{\taskin\task@id\wp@id}{lead}{\task@lead} +\pdata@def{task}{\taskin\task@id\wp@id}{partners}{\task@partners} +\pdata@def{task}{\taskin\task@id\wp@id}{PM}{\task@PM} +\pdata@def{task}{\taskin\task@id\wp@id}{wphases}{\task@wphases} +\@ifundefined{deliv@issue}{} +{\pdata@def{task}{\taskin\task@id\wp@id}{issue}{\task@issue}}% +\pdata@def{task}{\taskin\task@id\wp@id}{label}{\task@label\thewp\thetask@wp}% +\pdata@def{task}{\taskin\task@id\wp@id}{number}{\thetask@wp}% +\pdata@def{task}{\taskin\task@id\wp@id}{page}{\thepage}% +\update@tasks{\taskin\task@id\wp@id}} +\newcommand\workphase[1]{\PackageError{proposal} + {The \protect\workphase macro is deprecated,\MessageBreak + use the attributes wphase on the workpackage environment instead!}} +\newcommand\taskin[2]{#2@#1} +\newcommand\taskref[2]{\pdataRef{task}{#1@#2}{label}} +\newcommand\taskreflong[2]{\pdataRef{task}{#2}{label}} +\newcommand\tasktref[2]{\taskref{#1}{#2}: \pdataRefFB{task}{#1@#2}{short}{title}} +\newcommand\localtaskref[1]{\taskref{\wp@id}{#1}} +\newcommand\localtasktref[1]{\tasktref{\wp@id}{#1}} +\newcounter{gantt@deps} +\def\@requires#1#2{\stepcounter{gantt@deps}% +\edef\dep@id{taskdep\thegantt@deps}% +\pdata@def{taskdep}\dep@id{from}{\taskin{#1}\wp@id}% +\pdata@def{taskdep}\dep@id{to}{#2}% +\update@deps\dep@id} \newcommand\deliv@error{\PackageError{proposal} {To use use deliverables, you have to specify the option 'deliverables'}} \newenvironment{wpdelivs}{\begin{wp@delivs}}{\end{wp@delivs}} @@ -452,79 +525,6 @@ {\input{\jobname.deliverables}}% {\IfFileExists{\jobname.delivs}{\input{\jobname.delivs}}{}} \end{deliverables}} -\newenvironment{tasklist} -{\begin{compactenum}}{\end{compactenum}} -\newcommand\task@label[2]{\textbf{T#1.#2}} -\define@key{task}{id}{\def\task@id{#1}\@dmp{id=#1}} -\define@key{task}{wphases}{\def\task@wphases{#1}\@dmp{wphases=#1}} -\define@key{task}{requires}{\@requires\task@id{#1}\@dmp{req=#1}} -\define@key{task}{title}{\def\task@title{#1}} -\define@key{task}{lead}{\def\task@lead{#1}} -\define@key{task}{partners}{\def\task@partners{#1}} -\define@key{task}{PM}{\def\task@PM{#1}} -\define@key{task}{issue}{\def\task@issue{#1}} -\def\task@set#1{\edef\task@id{task\thetask@all} -\def\task@wphases{0-0}\def\task@partners{}\def\task@lead{}\def\task@PM{}\def\task@title{} -\setkeys{task}{#1}} -\def\task@post@title@space{\;} -\newcounter{alltasks} -\def\task@post@title@space{\quad} -\newcommand\task@legend@partners{Sites: } -\newcommand\task@legend@PM{PM} -\newenvironment{task}[1][]% -{\stepcounter{alltasks}% -\@task{#1}\item[\pdata@target{task}{\taskin\task@id\wp@id}{\task@label\thewp\thetask@wp}]% -\ifx\task@title\@empty\textbf\task@title\fi\task@post@title@space% -\def\@initial{0-0}\ifx\task@wphases\@initial\else% -\let\@@sep=\relax\@for\@I:=\task@wphases% -\do{\decode@wphase\@I% -\@@sep\show@wphase\wphase@start\wphase@end\wphase@force% -\let\@@sep=\sep@wphases}% -\fi% initial -\hfill% -\ifsubmit\else\ifx\task@PM\@empty\else\task@PM~\task@legend@PM;\fi\fi% -\ifx\task@lead\@empty\else\ \task@legend@partners\site\task@lead~(\legend@lead)\fi% -\@for\@I:=\task@partners\do{, \site\@I}\\% -\ignorespaces} -{\medskip} -\newcommand\month@label[1]{M#1} -\newcommand\show@wphase[3]{\edef\@test{#3}\def\@one{1}% -\month@label{#1}-\month@label{#2}% -\ifx\@test\@empty\else\ifx\@test\@one\else @#3\fi\fi} -\newcommand\sep@wphases{; } -\newcommand\legend@partners{Partners} -\newcommand\legend@lead{lead} -\newcommand\task@label@long{Task} -\newcounter{task@all}\newcounter{task@wp}[wp] -\newcount\task@@end -\def\@task#1{\stepcounter{task@all}\stepcounter{task@wp}% -\task@set{#1}% -\pdata@def{task}{\taskin\task@id\wp@id}{title}{\task@title} -\pdata@def{task}{\taskin\task@id\wp@id}{lead}{\task@lead} -\pdata@def{task}{\taskin\task@id\wp@id}{partners}{\task@partners} -\pdata@def{task}{\taskin\task@id\wp@id}{PM}{\task@PM} -\pdata@def{task}{\taskin\task@id\wp@id}{wphases}{\task@wphases} -\@ifundefined{deliv@issue}{} -{\pdata@def{task}{\taskin\task@id\wp@id}{issue}{\task@issue}}% -\pdata@def{task}{\taskin\task@id\wp@id}{label}{\task@label\thewp\thetask@wp}% -\pdata@def{task}{\taskin\task@id\wp@id}{number}{\thetask@wp}% -\pdata@def{task}{\taskin\task@id\wp@id}{page}{\thepage}% -\update@tasks{\taskin\task@id\wp@id}} -\newcommand\workphase[1]{\PackageError{proposal} - {The \protect\workphase macro is deprecated,\MessageBreak - use the attributes wphase on the workpackage environment instead!}} -\newcommand\taskin[2]{#2@#1} -\newcommand\taskref[2]{\pdataRef{task}{#1@#2}{label}} -\newcommand\taskreflong[2]{\pdataRef{task}{#2}{label}} -\newcommand\tasktref[2]{\taskref{#1}{#2}: \pdataRefFB{task}{#1@#2}{short}{title}} -\newcommand\localtaskref[1]{\taskref{\wp@id}{#1}} -\newcommand\localtasktref[1]{\tasktref{\wp@id}{#1}} -\newcounter{gantt@deps} -\def\@requires#1#2{\stepcounter{gantt@deps}% -\edef\dep@id{taskdep\thegantt@deps}% -\pdata@def{taskdep}\dep@id{from}{\taskin{#1}\wp@id}% -\pdata@def{taskdep}\dep@id{to}{#2}% -\update@deps\dep@id} \newcommand\prop@lead[1]{\@ifundefined{wp@#1@lead}% {\protect\G@refundefinedtrue\@latex@warning{lead for WP #1 undefined}??}% {\csname wp@#1@lead\endcsname}} diff --git a/base/proposal.dtx b/base/proposal.dtx index c59e1f5..a124d81 100644 --- a/base/proposal.dtx +++ b/base/proposal.dtx @@ -180,7 +180,7 @@ % \DescribeMacro{\ifpublic}|\ifpublic| conditional: |\ifpublic{3}\else{5}\fi| will result % in ``5'' in the submitted draft and ``3'' in the public document. % -% \subsection{Proposal Metadata and Title page}\label{sec:user:metadata} +% \subsection{Proposal Metadata}\label{sec:user:metadata} % % The metadata of the proposal is specified in the \DescribeEnv{proposal}|proposal| % environment, which also generates the title page and the first section of the proposal @@ -243,6 +243,9 @@ % The |proposal| package supplies the \DescribeEnv{emphbox}|emphbox| environment to create % boxes of emphasized material we want to call attention to. % +% \subsection{The proposal Environment and Title Page}\label{sec:user:title} +% \ednote{add documentation} +% % \subsection{Objectives}\label{sec:user:objectives} % % The work plan starts with a discussion of objectives, which may be referenced in the @@ -355,23 +358,6 @@ % default is 1. The main reason for specifying this metadata for tasks is to generate a % Gantt chart (see Section~\ref{sec:user:gantt}). % -% \subsection{Gantt Charts}\label{sec:user:gantt} -% -% Gantt charts are used in proposals to show the distribution of activities in work -% packages over time. A gantt chart is represented by the \DescribeEnv{gantt}|gantt| -% environment that takes a on optional keyval argument. The keys -% \DescribeMacro{xscale}|xscale| and \DescribeMacro{yscale}|yscale| are used to specify a -% scale factors for the chart so that it fits on the page. The \DescribeMacro{step}|step| -% key allows to specify the steps (in months) of the vertical auxiliary lines. Finally, -% the \DescribeMacro{draft}|draft| key specifies that plausibility checks (that can be -% expensive to run) are carried out. Note that the value does not have to be given, so -% |\begin{gantt}{draft,yscale=.5,step=3}| is a perfectly good invocation. -% -% Usually, the |gantt| environment is not used however, since it is part of the -% \DescribeMacro{\ganttchart} macro that takes the same keys. This generates a whole -% Gantt chart automatically from the work phase specifications in the work packages. As -% above we have to run {\LaTeX} two times for the work phases to show up. -% % \subsection{Milestones and Deliverables}\label{sec:user:deliverables} % % Many proposal formats foresee that project progress will be tracked in the form of @@ -435,7 +421,7 @@ % adds auxiliary files, so they are only activated if the |deliverables| option is given % (see Section~\ref{sec:user:options}). % -% \subsection{Referencing and Hyperlinking}\label{sec:user:hyperlinking} +% \subsection{Project Data, Referencing, and Hyperlinking}\label{sec:user:hyperlinking} % % The |proposal| package extends the hyperlinking provided by the |hyperref| package it % includes to work packages, work areas, \ldots. Whenever these are defined using the @@ -486,6 +472,26 @@ % |noworkareas| macro is set, we also have the variants \DescribeMacro{\WAref}|\WAref| and % \DescribeMacro{\WAtref}|\WAtref| for work areas. % +% \subsection{The Work Package Table}\label{sec:use:wptable} +% \ednote{add documentation} +% +% \subsection{Gantt Charts}\label{sec:user:gantt} +% +% Gantt charts are used in proposals to show the distribution of activities in work +% packages over time. A gantt chart is represented by the \DescribeEnv{gantt}|gantt| +% environment that takes a on optional keyval argument. The keys +% \DescribeMacro{xscale}|xscale| and \DescribeMacro{yscale}|yscale| are used to specify a +% scale factors for the chart so that it fits on the page. The \DescribeMacro{step}|step| +% key allows to specify the steps (in months) of the vertical auxiliary lines. Finally, +% the \DescribeMacro{draft}|draft| key specifies that plausibility checks (that can be +% expensive to run) are carried out. Note that the value does not have to be given, so +% |\begin{gantt}{draft,yscale=.5,step=3}| is a perfectly good invocation. +% +% Usually, the |gantt| environment is not used however, since it is part of the +% \DescribeMacro{\ganttchart} macro that takes the same keys. This generates a whole +% Gantt chart automatically from the work phase specifications in the work packages. As +% above we have to run {\LaTeX} two times for the work phases to show up. +% % \subsection{Coherence}\label{sec:user:coherence} % % Many proposals require ways to show coherence between the partners. The |proposal| class @@ -803,7 +809,7 @@ % \end{macrocode} % \end{environment} % -% \subsection{Title Page}\label{sec:impl:titlepage} +% \subsection{The proposal Environemt and Title Page}\label{sec:impl:titlepage} % % \begin{environment}{prop@proposal} % This internal environment is called in the |proposal| environment from the |proposal| @@ -1252,6 +1258,129 @@ % \end{macrocode} % \end{environment} % +% \subsection{Tasks}\label{sec:impl:tasks} +% +% \begin{environment}{tasklist} +% \begin{macrocode} +\newenvironment{tasklist} +{\begin{compactenum}}{\end{compactenum}} +% \end{macrocode} +% \end{environment} +% The next step is to +% \begin{macrocode} +\newcommand\task@label[2]{\textbf{T#1.#2}} +% \end{macrocode} +% We define the keys for the task macro +% \begin{macrocode} +\define@key{task}{id}{\def\task@id{#1}\@dmp{id=#1}} +\define@key{task}{wphases}{\def\task@wphases{#1}\@dmp{wphases=#1}} +\define@key{task}{requires}{\@requires\task@id{#1}\@dmp{req=#1}} +\define@key{task}{title}{\def\task@title{#1}} +\define@key{task}{lead}{\def\task@lead{#1}} +\define@key{task}{partners}{\def\task@partners{#1}} +\define@key{task}{PM}{\def\task@PM{#1}} +\define@key{task}{issue}{\def\task@issue{#1}} +\def\task@set#1{\edef\task@id{task\thetask@all} +\def\task@wphases{0-0}\def\task@partners{}\def\task@lead{}\def\task@PM{}\def\task@title{} +\setkeys{task}{#1}} +% \end{macrocode} +% +% \begin{macro}{\task@post@title@space} +% make the space after the title tweakable +% \begin{macrocode} +\def\task@post@title@space{\;} +% \end{macrocode} +% \end{macro} +% +% \begin{environment}{task} +% \begin{macrocode} +\newcounter{alltasks} +\def\task@post@title@space{\quad} +\newcommand\task@legend@partners{Sites: } +\newcommand\task@legend@PM{PM} +\newenvironment{task}[1][]% +{\stepcounter{alltasks}% +\@task{#1}\item[\pdata@target{task}{\taskin\task@id\wp@id}{\task@label\thewp\thetask@wp}]% +\ifx\task@title\@empty\textbf\task@title\fi\task@post@title@space% +\def\@initial{0-0}\ifx\task@wphases\@initial\else% +\let\@@sep=\relax\@for\@I:=\task@wphases% +\do{\decode@wphase\@I% +\@@sep\show@wphase\wphase@start\wphase@end\wphase@force% +\let\@@sep=\sep@wphases}% +\fi% initial +\hfill% +\ifsubmit\else\ifx\task@PM\@empty\else\task@PM~\task@legend@PM;\fi\fi% +\ifx\task@lead\@empty\else\ \task@legend@partners\site\task@lead~(\legend@lead)\fi% +\@for\@I:=\task@partners\do{, \site\@I}\\% +\ignorespaces} +{\medskip} +% \end{macrocode} +% now the multilingual support and presentation configuration +% \begin{macrocode} +\newcommand\month@label[1]{M#1} +\newcommand\show@wphase[3]{\edef\@test{#3}\def\@one{1}% +\month@label{#1}-\month@label{#2}% +\ifx\@test\@empty\else\ifx\@test\@one\else @#3\fi\fi} +\newcommand\sep@wphases{; } +\newcommand\legend@partners{Partners} +\newcommand\legend@lead{lead} +\newcommand\task@label@long{Task} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\@task} +% The |\@task| macro is a internal macro which takes a bunch of keyword keys and writes +% their values to the aux file. +% \begin{macrocode} +\newcounter{task@all}\newcounter{task@wp}[wp] +\newcount\task@@end +\def\@task#1{\stepcounter{task@all}\stepcounter{task@wp}% +\task@set{#1}% +\pdata@def{task}{\taskin\task@id\wp@id}{title}{\task@title} +\pdata@def{task}{\taskin\task@id\wp@id}{lead}{\task@lead} +\pdata@def{task}{\taskin\task@id\wp@id}{partners}{\task@partners} +\pdata@def{task}{\taskin\task@id\wp@id}{PM}{\task@PM} +\pdata@def{task}{\taskin\task@id\wp@id}{wphases}{\task@wphases} +\@ifundefined{deliv@issue}{} +{\pdata@def{task}{\taskin\task@id\wp@id}{issue}{\task@issue}}% +\pdata@def{task}{\taskin\task@id\wp@id}{label}{\task@label\thewp\thetask@wp}% +\pdata@def{task}{\taskin\task@id\wp@id}{number}{\thetask@wp}% +\pdata@def{task}{\taskin\task@id\wp@id}{page}{\thepage}% +\update@tasks{\taskin\task@id\wp@id}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Work Phase Metadata}\label{sec:impl:workphase} +% +% \begin{macro}{\workphase} +% \begin{macrocode} +\newcommand\workphase[1]{\PackageError{proposal} + {The \protect\workphase macro is deprecated,\MessageBreak + use the attributes wphase on the workpackage environment instead!}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\*task*ref} +% \begin{macrocode} +\newcommand\taskin[2]{#2@#1} +\newcommand\taskref[2]{\pdataRef{task}{#1@#2}{label}} +\newcommand\taskreflong[2]{\pdataRef{task}{#2}{label}} +\newcommand\tasktref[2]{\taskref{#1}{#2}: \pdataRefFB{task}{#1@#2}{short}{title}} +\newcommand\localtaskref[1]{\taskref{\wp@id}{#1}} +\newcommand\localtasktref[1]{\tasktref{\wp@id}{#1}} +% \end{macrocode} +% \end{macro} +% now we initialize experimental infrastructure for task dependencies (not very well used/tested) +% \begin{macrocode} +\newcounter{gantt@deps} +\def\@requires#1#2{\stepcounter{gantt@deps}% +\edef\dep@id{taskdep\thegantt@deps}% +\pdata@def{taskdep}\dep@id{from}{\taskin{#1}\wp@id}% +\pdata@def{taskdep}\dep@id{to}{#2}% +\update@deps\dep@id} +% +% \end{macrocode} +% %\subsection{Milestones and Deliverables}\label{sec:impl:deliverables} % % \begin{macro}{deliv@error} @@ -1521,127 +1650,6 @@ % \end{macrocode} % \end{macro} % -% \subsection{Tasks and Work Phases}\label{sec:impl:tasks} -% -% \begin{environment}{tasklist} -% \begin{macrocode} -\newenvironment{tasklist} -{\begin{compactenum}}{\end{compactenum}} -% \end{macrocode} -% \end{environment} -% The next step is to -% \begin{macrocode} -\newcommand\task@label[2]{\textbf{T#1.#2}} -% \end{macrocode} -% We define the keys for the task macro -% \begin{macrocode} -\define@key{task}{id}{\def\task@id{#1}\@dmp{id=#1}} -\define@key{task}{wphases}{\def\task@wphases{#1}\@dmp{wphases=#1}} -\define@key{task}{requires}{\@requires\task@id{#1}\@dmp{req=#1}} -\define@key{task}{title}{\def\task@title{#1}} -\define@key{task}{lead}{\def\task@lead{#1}} -\define@key{task}{partners}{\def\task@partners{#1}} -\define@key{task}{PM}{\def\task@PM{#1}} -\define@key{task}{issue}{\def\task@issue{#1}} -\def\task@set#1{\edef\task@id{task\thetask@all} -\def\task@wphases{0-0}\def\task@partners{}\def\task@lead{}\def\task@PM{}\def\task@title{} -\setkeys{task}{#1}} -% \end{macrocode} -% -% \begin{macro}{\task@post@title@space} -% make the space after the title tweakable -% \begin{macrocode} -\def\task@post@title@space{\;} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{task} -% \begin{macrocode} -\newcounter{alltasks} -\def\task@post@title@space{\quad} -\newcommand\task@legend@partners{Sites: } -\newcommand\task@legend@PM{PM} -\newenvironment{task}[1][]% -{\stepcounter{alltasks}% -\@task{#1}\item[\pdata@target{task}{\taskin\task@id\wp@id}{\task@label\thewp\thetask@wp}]% -\ifx\task@title\@empty\textbf\task@title\fi\task@post@title@space% -\def\@initial{0-0}\ifx\task@wphases\@initial\else% -\let\@@sep=\relax\@for\@I:=\task@wphases% -\do{\decode@wphase\@I% -\@@sep\show@wphase\wphase@start\wphase@end\wphase@force% -\let\@@sep=\sep@wphases}% -\fi% initial -\hfill% -\ifsubmit\else\ifx\task@PM\@empty\else\task@PM~\task@legend@PM;\fi\fi% -\ifx\task@lead\@empty\else\ \task@legend@partners\site\task@lead~(\legend@lead)\fi% -\@for\@I:=\task@partners\do{, \site\@I}\\% -\ignorespaces} -{\medskip} -% \end{macrocode} -% now the multilingual support and presentation configuration -% \begin{macrocode} -\newcommand\month@label[1]{M#1} -\newcommand\show@wphase[3]{\edef\@test{#3}\def\@one{1}% -\month@label{#1}-\month@label{#2}% -\ifx\@test\@empty\else\ifx\@test\@one\else @#3\fi\fi} -\newcommand\sep@wphases{; } -\newcommand\legend@partners{Partners} -\newcommand\legend@lead{lead} -\newcommand\task@label@long{Task} -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\@task} -% The |\@task| macro is a internal macro which takes a bunch of keyword keys and writes -% their values to the aux file. -% \begin{macrocode} -\newcounter{task@all}\newcounter{task@wp}[wp] -\newcount\task@@end -\def\@task#1{\stepcounter{task@all}\stepcounter{task@wp}% -\task@set{#1}% -\pdata@def{task}{\taskin\task@id\wp@id}{title}{\task@title} -\pdata@def{task}{\taskin\task@id\wp@id}{lead}{\task@lead} -\pdata@def{task}{\taskin\task@id\wp@id}{partners}{\task@partners} -\pdata@def{task}{\taskin\task@id\wp@id}{PM}{\task@PM} -\pdata@def{task}{\taskin\task@id\wp@id}{wphases}{\task@wphases} -\@ifundefined{deliv@issue}{} -{\pdata@def{task}{\taskin\task@id\wp@id}{issue}{\task@issue}}% -\pdata@def{task}{\taskin\task@id\wp@id}{label}{\task@label\thewp\thetask@wp}% -\pdata@def{task}{\taskin\task@id\wp@id}{number}{\thetask@wp}% -\pdata@def{task}{\taskin\task@id\wp@id}{page}{\thepage}% -\update@tasks{\taskin\task@id\wp@id}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\workphase} -% \begin{macrocode} -\newcommand\workphase[1]{\PackageError{proposal} - {The \protect\workphase macro is deprecated,\MessageBreak - use the attributes wphase on the workpackage environment instead!}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\*task*ref} -% \begin{macrocode} -\newcommand\taskin[2]{#2@#1} -\newcommand\taskref[2]{\pdataRef{task}{#1@#2}{label}} -\newcommand\taskreflong[2]{\pdataRef{task}{#2}{label}} -\newcommand\tasktref[2]{\taskref{#1}{#2}: \pdataRefFB{task}{#1@#2}{short}{title}} -\newcommand\localtaskref[1]{\taskref{\wp@id}{#1}} -\newcommand\localtasktref[1]{\tasktref{\wp@id}{#1}} -% \end{macrocode} -% \end{macro} -% now we initialize experimental infrastructure for task dependencies (not very well used/tested) -% \begin{macrocode} -\newcounter{gantt@deps} -\def\@requires#1#2{\stepcounter{gantt@deps}% -\edef\dep@id{taskdep\thegantt@deps}% -\pdata@def{taskdep}\dep@id{from}{\taskin{#1}\wp@id}% -\pdata@def{taskdep}\dep@id{to}{#2}% -\update@deps\dep@id} -% -% \end{macrocode} -% % \subsection{Project Data, Referencing \& Hyperlinking}\label{sec:impl:hyperlinking} % % \begin{macro}{\pdata@*} @@ -2532,7 +2540,7 @@ joint&\multicolumn{\the@site}{l|}{\jpub $\hat=$ publication, \jpro $\hat=$ proje % LocalWords: duration Application period Summary short lead Package label task botupMP % LocalWords: tasks deps number line Effort target ids count warning at pdata swsites % LocalWords: for undefined safe zero one two three four five six seven eight swsites -% LocalWords: nine ten eleven twelve style lines totals Packages xscale yscale wphrases +% LocalWords: nine ten eleven twelve style lines totals Packages xscale yscale % LocalWords: step set gray very thin grid workphase len force phase length to endhead % LocalWords: taskdep from rectangle left right width pt color red above dep jointsub % LocalWords: Overview Activities Signatures Date paralist ymonths ymid yinc jointsoft diff --git a/base/proposal.pdf b/base/proposal.pdf index f3afe33..88f3fd0 100644 Binary files a/base/proposal.pdf and b/base/proposal.pdf differ diff --git a/base/reporting.cls b/base/reporting.cls index 77c5e59..62e5134 100644 --- a/base/reporting.cls +++ b/base/reporting.cls @@ -117,6 +117,140 @@ \end{center} \setcounter{tocdepth}{2}\tableofcontents\newpage\setcounter{page}{1}} {} +\newcommand\deliv@error{\PackageError{proposal} +{To use use deliverables, you have to specify the option 'deliverables'}} +\newenvironment{wpdelivs}{\begin{wp@delivs}}{\end{wp@delivs}} +\newenvironment{wp@delivs} +{\ifdelivs\textbf\deliv@legend@delivs:\\[-3ex]% +\begin{compactdesc}\else\deliv@error\fi} +{\ifdelivs\end{compactdesc}\fi} +\newcommand\deliv@legend@delivs{Deliverables} +\newenvironment{wadelivs} +{\textbf\deliv@legend@delivs:\\[-3ex]\begin{wp@delivs}} +{\end{wp@delivs}} +\newcommand\lec[1]{\strut\hfil\strut\null\nobreak\hfill\hbox{$\leadsto$#1}\par} +\newcommand\deliv@label[1]{D{#1}} +\newcommand\delivref[2]{\pdataRef{deliv}{#1@#2}{label}} +\newcommand\localdelivref[1]{\delivref{\wp@id}{#1}} +\newcommand\delivtref[2]{\delivref{#1}{#2}: \pdataRefFB{deliv}{#1@#2}{short}{title}} +\newcommand\localdelivtref[1]{\delivtref{\wp@id}{#1}} +\define@key{deliv}{id}{\def\deliv@id{#1}} +\define@key{deliv}{due}{\def\deliv@due{#1}} +\define@key{deliv}{dissem}{\def\deliv@dissem{#1}} +\define@key{deliv}{nature}{\def\deliv@nature{#1}} +\define@key{deliv}{miles}{\def\deliv@miles{#1}} +\define@key{deliv}{short}{\def\deliv@short{#1}} +\define@key{deliv}{lead}{\def\deliv@lead{#1}} +\define@key{deliv}{issue}{\def\deliv@issue{#1}} +\newcounter{deliverable} +\newcommand{\wpg@deliv}[3]{% keys, title, type +\stepcounter{deliverable} +\let\deliv@miles=\relax% clean state +\def\@type{#3}\def\@wp{wp}% set up ifx +\def\wpg@id{\csname #3@id\endcsname} +\setkeys{deliv}{#1}\stepcounter{deliv}% set state +\ifx\@type\@wp\def\current@label{\deliv@label{\ifwork@areas\thewa.\fi\thewp.\thedeliv}} +\else\def\current@label{\deliv@label{\thewa.\thedeliv}}\fi +\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{label}{\current@label} +\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{title}{#2} +\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{page}{\thepage}% +\@ifundefined{deliv@short} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{short}{#2}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{short}{\deliv@short}} +\@ifundefined{deliv@nature} +{\protect\G@refundefinedtrue\@latex@warning{key 'nature' for Deliv \wpg@id undefined}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{nature}{\deliv@nature}} +\@ifundefined{deliv@dissem} +{\protect\G@refundefinedtrue\@latex@warning{key 'dissem' for Deliv \wpg@id undefined}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{dissem}{\deliv@dissem}} +\@ifundefined{deliv@lead} +{\protect\G@refundefinedtrue\@latex@warning{key 'lead' for Deliv \wpg@id undefined}} +{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{lead}{\deliv@lead}} +\@ifundefined{deliv@due}{}{% +\@ifundefined{deliv@issue}{}{\pdata@def{deliv}{\taskin\deliv@id\wpg@id}{issue}{\deliv@issue}} +\@for\@I:=\deliv@due\do{\protected@write\wpg@delivs{}{\string\deliverable% +{\ifnum\@I<10 0\@I\else\@I\fi}% sort key +{\@I}% due date +{\current@label}% label +{\@ifundefined{deliv@id}{??}{\taskin\deliv@id\wpg@id}}% id +{\@ifundefined{deliv@dissem}{??}{\deliv@dissem}}% dissemination level +{\@ifundefined{deliv@nature}{??}{\deliv@nature}}% nature +{#2} +{\ifx\@type\@wp{WP\ifwork@areas\thewa.\fi\thewp}\else{WA\thewa}\fi}%WP +{\@ifundefined{deliv@lead}{??}{\string\site{\deliv@lead}}}}}}% lead +\item[\current@label\ (% +\delivs@legend@due: \@ifundefined{deliv@due}{??}{\deliv@due}, +\delivs@legend@nature: \@ifundefined{deliv@nature}{??}{\deliv@nature}, +\delivs@legend@dissem: \@ifundefined{deliv@dissem}{??}{\deliv@dissem}, +\delivs@legend@lead: \@ifundefined{deliv@lead}{??}{\site{\deliv@lead}})] + \pdata@target{deliv}{\taskin\deliv@id\wpg@id}{\textit{#2}} +\@ifundefined{deliv@miles}{}{% print the milestones and update their deliverables +\let\m@sep=\relax% do not print the separator the first time round +\lec{\@for\@I:=\deliv@miles\do{% Iterate over the milestones mentioned +\m@sep\pdataRef{mile}{\@I}{label}% print the milestone reference +\let\m@sep=,}}%set the separator for the next times +\def\d@sep{,} + \@for\@I:=\deliv@miles\do{% Iterate over the milestones mentioned + \expandafter\ifx\csname\@I delivs\endcsname\relax% Check that the miles@delivs is empty + {\expandafter\xdef\csname\@I delivs\endcsname{\wpg@id @\deliv@id}}% if so, skip the separator + \else\expandafter\xdef\csname\@I delivs\endcsname%if not add it + {\csname\@I delivs\endcsname\d@sep\wpg@id @\deliv@id}\fi}}} +\newenvironment{wadeliv}[2][]{\ifdelivs\wpg@deliv{#1}{#2}{wa}\else\deliv@error\fi}{} +\newenvironment{wpdeliv}[2][]{\ifdelivs\wpg@deliv{#1}{#2}{wp}\else\deliv@error\fi}{} +\newcommand\milestone@label[1]{M{#1}} +\newcommand\mileref[1]{\pdataRef{mile}{#1}{label}} +\newcommand\miletref[1]{\mileref{#1}: \pdataRefFB{mile}{#1}{short}{title}} +\newcounter{milestone} +\define@key{milestone}{id}{\gdef\mile@id{#1}} +\define@key{milestone}{month}{\gdef\mile@month{#1}} +\newcommand\milestone[3][]{% +\ifdelivs% +\setkeys{milestone}{#1}\stepcounter{milestone}% +\pdata@def{mile}\mile@id{label}{\milestone@label{\themilestone}}% +\pdata@def{mile}\mile@id{month}{\mile@month}% +\pdata@def{mile}\mile@id{title}{#2}% +\pdata@def{mile}\mile@id{description}{#3}% +\@ifundefined{mile@stones}% +{\xdef\mile@stones{\mile@id}}% +{\xdef\mile@stones{\mile@stones,\mile@id}}% +\@milestone{\mile@id}{#2}{#3}% presentation +\else\deliv@error\fi} +\newcommand\@milestone[3]{% id, title, description +\item \textbf{\miles@legend@milestone\xspace\pdata@target{mile}\mile@id{\pdataref{mile}{#1}{label}} +(\miles@legend@month \pdataref{mile}\mile@id{month}) +\textbf{#2}} #3} +\newcommand\miles@legend@month{Month} +\newcommand\miles@legend@milestone{Milestone} +\newenvironment{milestones}% +{\ifdelivs\begin{@milestones}\else\deliv@error\fi} +{\ifdelivs\pdata@def{all}{mile}{ids}{\mile@stones}% +\pdata@def{all}{mile}{count}{\themilestone}% +\end{@milestones}\fi} +\newenvironment{@milestones}{\begin{enumerate}}{\end{enumerate}} +\newcommand{\deliverable}[9]{\pdataRef{deliv}{#4}{label} \\\hline}%sortkey,due,label,id,title,type,level,lead +\newenvironment{deliverables}[1]{\ifdelivs\begin{longtable}{|l|p{#1}|l|l|l|l|l|}\hline% +\#&\textbf{\delivs@legend@name}&% +\textbf{\delivs@legend@wp}&% +\textbf{\delivs@legend@lead}&% +\textbf{\delivs@legend@nature}&% +\textbf{\delivs@legend@level}&% +\textbf{\delivs@legend@due}\\\hline\hline% +\endhead% +\else\deliv@error\fi} +{\ifdelivs\end{longtable}\fi} +\newcommand\delivs@legend@name{Deliverable name} +\newcommand\delivs@legend@wp{WP} +\newcommand\delivs@legend@nature{Type} +\newcommand\delivs@legend@level{Level} +\newcommand\delivs@legend@due{Due} +\newcommand\delivs@legend@dissem{Dissem.} +\newcommand\delivs@legend@lead{Lead} +\newcommand{\inputdelivs}[1]{% +\begin{deliverables}{#1}% +\IfFileExists{\jobname.deliverables}% +{\input{\jobname.deliverables}}% +{\IfFileExists{\jobname.delivs}{\input{\jobname.delivs}}{}} +\end{deliverables}} \defbibheading{empty}{} \newif\if@allpapers\@allpaperstrue \newcommand\prop@ppl[3][]{\@allpapersfalse\message{ppl processing: #2}%