定制 tikz 日历

定制 tikz 日历

我正在尝试制作一个简单的日历,这是我目前取得的进展......

\documentclass{article}
\usepackage[nomessages]{fp}% http://ctan.org/pkg/fp
\usepackage{tikz}
\usepackage{ifthen}
\usetikzlibrary{arrows,shapes}
\usetikzlibrary{positioning,calendar,er}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{shapes.geometric}
\usepackage[margin=0.5in, paperwidth=15.8in, paperheight=8.5in]{geometry}
\usepackage{geometry}
\pagenumbering{gobble}

\makeatletter%

\newcommand{\modulo}[2]{%
  \FPeval{\result}{trunc(#1-(#2*trunc(#1/#2,0)),0)}\result%
}

    \pgfkeys{/pgf/calendar/even/.code={%
            \pgfmathparse{int(mod(\pgfcalendarifdatejulian,2))}
            \ifnum 
              \pgfmathresult=0
            \relax\pgfcalendarmatchestrue\fi%
    }}%

\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}
    \begin{tikzpicture}[every calendar/.style={
        week list,
        month label above centered,
        day xshift = 0.8cm,
        day headings=black,
        day letter headings,
        }]
        \matrix[column sep=5em, row sep=3em] {
            \calendar[dates=2012-01-01 to 2012-01-last] if (even) [orange]; &
            \calendar[dates=2012-02-01 to 2012-02-last] if (even) [orange]; &
            \calendar[dates=2012-03-01 to 2012-03-last] if (even) [orange]; \\
            \calendar[dates=2012-04-01 to 2012-04-last] if (even) [orange]; &
            \calendar[dates=2012-05-01 to 2012-05-last] if (even) [orange]; &
            \calendar[dates=2012-06-01 to 2012-06-last] if (even) [orange]; \\
            \calendar[dates=2012-07-01 to 2012-07-last] if (even) [orange]; &
            \calendar[dates=2012-08-01 to 2012-08-last] if (even) [orange]; &
            \calendar[dates=2012-09-01 to 2012-09-last] if (even) [orange]; \\
            \calendar[dates=2012-10-01 to 2012-10-last] if (even) [orange]; &
                \calendar[dates=2012-11-01 to 2012-11-last] if (even) [orange]; &
            \calendar[dates=2012-12-01 to 2012-12-last] if (even) [orange]; \\
        };

    \end{tikzpicture}
\end{document}

现在我想交替地为每一天涂上颜色,例如 1 月 1 日、3 日、5 日……将是一种颜色,其余的则是另一种颜色,全年都是这样。这可以是数字的不同字体颜色或背景填充颜色,我并不介意,只要有一种漂亮的方法可以轻松区分一年中的奇数日和偶数日即可。

附言:这只是一个小麻烦,但我的日历出现在 pdf 文件的第 2 页,而第一页是空白的,我不知道为什么。我把它做成了pdflatex wim_cal.tex wim_cal.pdf


经过几个小时的捣鼓,我取得了一些小进展,并编辑了上面的 tex 示例(您可以看到差异..)第一个空白页的问题已经解决。

现在我想我快到了,如果你搜索部分\pgfcalendarifdatejulian,当我用偶数替换它时,日历上的所有日子都是橙色的,当我用奇数替换它时,日历上的所有日子都是黑色的。但是如果按\pgfcalendarifdatejulian原样,我会得到一个错误,就像! Dimension too large.执行 pdflatex 时一样。我现在错过了什么?


编辑:我还没有解决这个问题......我应该发布一个新的、更新我最近的尝试的问题吗?

答案1

您可以指定一个if条件,例如

\calendar[dates=2012-01-01 to 2012-01-last] if (Monday,Wednesday,Friday,Sunday) [red];

calendar

您的日历显示在第 2 页,因为它对于文本区域来说太高了。您将收到警告Overfull \vbox,并且日历tikzpicture将移至下一页。请将其缩小一点或调整文本区域。

相关内容