pgfgantt-Auflösung; Monat für Titel, Tag für Balken

pgfgantt-Auflösung; Monat für Titel, Tag für Balken

Mir ist noch keine gute Lösung für die Darstellung von Aufgaben (Balken) mit täglicher Auflösung eingefallen, ohne dass der Gantt-Titel zu voll ist und die Aufgaben somit auf eine monatliche Auflösung beschränkt bleiben.

Ich möchte Start- und Endzeiten für Gruppen und Aufgaben/Balken durch einen Datumsangabe im Format: jjjj-mm-tt definieren.

Hier ist ein MWE:

\NeedsTeXFormat{LaTeX2e}
\documentclass[10pt]{standalone}
\usepackage{pgfgantt}
\usepackage[scaled]{helvet}

\newcommand{\graphstart}{2019-01}   % start of graph (two months buffer)
\newcommand{\graphend}{2019-09} % end date  (two months buffer)

\renewcommand\familydefault{\sfdefault}

% create a new command for a ganttbar entry
\newcommand{\ganttbarentry}[4]{%
\ganttbar[bar/.append style={pattern color = #1}]{#2}{#3}{#4}%
}%

\begin{document}
\begin{ganttchart}[
vgrid,
hgrid,
x unit=0.47cm,
y unit chart=0.41cm,
time slot format=isodate-yearmonth,
time slot unit=month,
%compress calendar=true,
bar/.append style={pattern=north west lines, pattern color = cyan},%
]{\graphstart}{\graphend}
\gantttitlecalendar{year, month}\\
%

\ganttgroup{Group I}{2019-03}{2019-05} \\%
% March 4th - 6th
    \ganttbarentry{gray}{Task I}{2019-03}{2019-03} \\%
% March 15 - April 5th
    \ganttbarentry{gray}{Task II}{2019-03}{2019-03} \\%
\\

\ganttgroup{Group II}{2019-03}{2019-05} \\%
% March 4th - 6th
    \ganttbarentry{gray}{Task I}{2019-03}{2019-03} \\%
% March 4th - March 15th
    \ganttbarentry{gray}{Task II}{2019-04}{2019-04} \\%

\end{ganttchart}
\end{document}

Die Ausgabe ist blockig bzw. auf eine Monatsauflösung beschränkt:

Bildbeschreibung hier eingeben

Antwort1

Hier ist ein Vorschlag. Er enthält einen Befehl \Ganttbarentry, der sehr ähnlich wie Ihr eigener Befehl funktioniert, \ganttbarentryaußer dass er sechs statt vier Parameter benötigt. Die letzten beiden Parameter sind die Start- und Endtage, also z. B.

\Ganttbarentry{gray}{Task I}{2019-03}{2019-03}{4}{6}

gibt Ihnen einen Balken, der am 3. März beginnt und am 4. April endet.

\NeedsTeXFormat{LaTeX2e}
\documentclass[10pt]{standalone}
\usepackage{pgfgantt}
\usepackage[scaled]{helvet}

\newcommand{\graphstart}{2019-01}   % start of graph (two months buffer)
\newcommand{\graphend}{2019-09} % end date  (two months buffer)

\renewcommand\familydefault{\sfdefault}

% create a new command for a ganttbar entry
\newcommand{\ganttbarentry}[4]{%
\ganttbar[bar/.append style={pattern color = #1}]{#2}{#3}{#4}%
}%
\newcommand{\Ganttbarentry}[6]{%
\ganttbar[/pgfgantt/bar left shift=#5/30,
    /pgfgantt/bar right shift=#6/30,bar/.append style={pattern color = #1}]{#2}{#3}{#4}%
}%



\begin{document}
\begin{ganttchart}[
vgrid,
hgrid,
x unit=0.47cm,
y unit chart=0.41cm,
time slot format=isodate-yearmonth,
time slot unit=month,
%compress calendar=true,
bar/.append style={pattern=north west lines, pattern color = cyan},%
]{\graphstart}{\graphend}
\gantttitlecalendar{year, month}\\
%

\ganttgroup{Group I}{2019-03}{2019-05} \\%
% March 4th - 6th
\Ganttbarentry{gray}{Task I}{2019-03}{2019-03}{4}{6} \\%
% March 15 - April 5th
\Ganttbarentry{gray}{Task II}{2019-03}{2019-03}{15}{5} \\%

\ganttgroup{Group II}{2019-03}{2019-05} \\%
% March 4th - 6th
\Ganttbarentry{gray}{Task I}{2019-03}{2019-03}{4}{6} \\%
% March 4th - March 15th
\Ganttbarentry{gray}{Task II}{2019-04}{2019-04}{4}{15} \\%

\end{ganttchart}
\end{document}

Bildbeschreibung hier eingeben

Dies kann auf viele Arten verbessert werden. Eine Möglichkeit besteht darin, das vollständige Datum zu analysieren (anstatt es vom Benutzer manuell aufteilen zu lassen). Dies scheint machbar, aber mit mehr Aufwand verbunden, als man naiv erwarten würde. Und die aktuelle Version geht davon aus, dass jeder Monat 30 Tage hat. Dies umzusetzen scheint ebenfalls machbar, aber noch mühsamer.

verwandte Informationen