使用 TikZ 库“日历”添加工作日标题

使用 TikZ 库“日历”添加工作日标题

我使用 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}

带有单字母日期标题的周列表日历

相关内容