resolución pgfgantt; mes para título, día para barras

resolución pgfgantt; mes para título, día para barras

Todavía no he encontrado una buena solución para representar tareas (barras) en resolución diaria sin tener un título de Gantt demasiado ocupado, es decir, limitarlo a resolución mensual.

Me gustaría definir las horas de inicio y finalización para grupos y tareas/barras mediante un especificador de fecha del formato: aaaa-mm-dd.

Aquí hay un 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}

La salida es en bloques/limitada a una resolución mensual:

ingrese la descripción de la imagen aquí

Respuesta1

He aquí una propuesta. Viene con un comando \Ganttbarentryque funciona de manera muy similar a su propio comando \ganttbarentryexcepto que requiere seis parámetros en lugar de cuatro. Los dos últimos parámetros son los días de inicio y finalización, por lo que, por ejemplo

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

le dará una barra con estadísticas del 3 de marzo y que finaliza el 4 de abril.

\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}

ingrese la descripción de la imagen aquí

Esto se puede mejorar de muchas maneras. Una forma es hacer que analice la fecha completa (en lugar de que el usuario tenga que dividirla a mano). Esto parece factible, pero supone un esfuerzo mayor del que uno podría esperar ingenuamente. Y la versión actual supone que cada mes tiene 30 días. Implementar esto también parece factible, pero aún más tedioso.

información relacionada