我正在尝试制作一个简单的日历,这是我目前取得的进展......
\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];
您的日历显示在第 2 页,因为它对于文本区域来说太高了。您将收到警告Overfull \vbox
,并且日历tikzpicture
将移至下一页。请将其缩小一点或调整文本区域。