![pgfgantt:如何按月间隔创建 vgrid?](https://linux22.com/image/478653/pgfgantt%EF%BC%9A%E5%A6%82%E4%BD%95%E6%8C%89%E6%9C%88%E9%97%B4%E9%9A%94%E5%88%9B%E5%BB%BA%20vgrid%EF%BC%9F.png)
考虑以下最小工作示例(MWE):
\documentclass{standalone}
\usepackage{tikz,pgfgantt}
\begin{document}
\begin{ganttchart}[%
time slot format = isodate,
vgrid = { *6{dotted}, *1{dashed} },
]%
{2019-01-01}{2019-02-15}
\gantttitlecalendar{year, month=shortname}\\
\end{ganttchart}
\end{document}
结果截图:
问题:
如何为vgrid
每个月添加额外的行(如下一个屏幕截图所示)?由于月份长度不规则(有些是 28 天,而有些是 31 天),因此无法只为每个第 31 天添加行。:-)
此外,还应在保留vgrid
周历的同时,额外添加月历。vgrid
答案1
vgrid
采用样式列表。 A样式列表只是一系列与需要绘制的每条线的规格相对应的指令。一周从星期一开始。2019 年 1 月 1 日是星期二。日期用灰色虚线分隔,星期用黑色虚线分隔,月份末尾用宽度为 3pt 的红线分隔。
因此,序列是 5 条虚线,后面跟着一条虚线,以结束第一周:*5{dotted},*1{dashed}
。接下来是三个完整的星期,所以我们重复*6{dotted},*1{dashed}
三次。月底是在下一周,所以我们写:*3{dotted},{red,line width=3pt},*2{dotted},*1{dashed}
以完成图表中的第 5 周。然后我们再添加 2 周的点划线格式以完善图表。
为了清楚起见,我添加了星期名称和周数。
\documentclass[tikz]{standalone}
\usepackage{pgfgantt}
\def\pgfcalendarweekdayletter#1{%
\ifcase#1M\or T\or W\or T\or F\or S\or S\fi%
}
\begin{document}
\begin{ganttchart}[%
time slot format = isodate,
vgrid = { *5{dotted}, *1{dashed}, % week 1
*6{dotted}, *1{dashed}, % week 2
*6{dotted}, *1{dashed}, % week 3
*6{dotted}, *1{dashed}, % week 4
*3{dotted},{red,line width=3pt},*2{dotted}, *1{dashed}, % week 5
*6{dotted}, *1{dashed}, % week 6
*4{dotted}}] % week 7
{2019-01-01}{2019-02-15}
\gantttitlecalendar{year, month=shortname,week,day,weekday=letter}\\
\end{ganttchart}
\end{document}