我使用 TikZ 库calendar
来生成周列表。代码如下:
\documentclass{article}
\usepackage{pgf,tikz}
\usetikzlibrary{calendar}
\begin{document}
\tikz\calendar[dates=2011-02-01 to 2011-02-last,week list];
\end{document}
但是,我想在周列表的第一行添加工作日(M,T,W,...)的缩写标题:
M T W T F S S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28
我找不到\calendar
产生此效果的宏的任何选项。还有其他解决方案可以实现我的目标吗?
答案1
无法使用单个选项来实现这一点,但以下代码可以保留日历的所有选项,从而获取星期几的标题week list
。它添加了样式day letter headings
(在此形式下,只有与样式一起使用才有意义week list
)。可以使用选项设置标题的样式day headings
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calendar}
\makeatletter%
\tikzoption{day headings}{\tikzstyle{day heading}=[#1]}
\tikzstyle{day heading}=[]
\tikzstyle{day letter headings}=[
execute before day scope={ \ifdate{day of month=1}{%
\pgfmathsetlength{\pgf@ya}{\tikz@lib@cal@yshift}%
\pgfmathsetlength\pgf@xa{\tikz@lib@cal@xshift}%
\pgftransformyshift{-\pgf@ya}
\foreach \d/\l in {0/M,1/T,2/W,3/T,4/F,5/S,6/S} {
\pgf@xa=\d\pgf@xa%
\pgftransformxshift{\pgf@xa}%
\pgftransformyshift{\pgf@ya}%
\node[every day,day heading]{\l};%
}
}{}%
}%
]
\makeatother%
\begin{document}
\tikz\calendar[dates=2011-02-01 to 2011-04-last,
week list,
month label above centered,
day xshift = 0.8cm,
day headings=orange,
day letter headings
];
\end{document}