为 tikz 日历设置具有多个参数的全局样式

为 tikz 日历设置具有多个参数的全局样式

我想创建一个带有参数的样式以供 TikZcalendar库使用。

这是一个与我想要的类似的工作示例:

\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{calendar}

\begin{document}
\tikzstyle{ColorDay}=[if={(equals=2-7) [every day/.append style=#1]}]

\begin{tikzpicture}
    \calendar (cal) [dates=2013-02-1 to 2013-02-28,week list,
    ColorDay={red}];
\end{tikzpicture}
\end{document}

我有两个问题。

首先,我不得不\tikzstyle在这里使用弃用的命令,而不是\tikzset。我根本无法\tikzset使用calendarif。例如,

\tikzset{ColorDay/.style=if={(equals=2-7) [every day/.append style=#1]}}

不起作用。事实上,即使我删除该参数,它也不会起作用。

\tikzset{ColorDay/.style=if={(equals=2-7) [every day/.append style=red]}}

其次,我不知道如何创建具有多个参数的样式。例如,

\tikzstyle{ColorDay}=[if={(equals=#1) [every day/.append style=#2]}]

不起作用。

答案1

\tikzset在这里确实有效,但如果样式包含逗号或等号,则需要使用一对括号。要获取具有两个参数的样式,请使用\tikzset{Color Day/.style 2 args={...}},或者如果您想要更多参数,请使用\tikzset{Color Day/.style n args={3}{...}}

\documentclass[10pt]{article}
\usepackage{tikz}
\usetikzlibrary{calendar}

\begin{document}
\tikzset{
    ColorDay/.style 2 args={
        if={(equals=#1) [every day/.append style=#2]}
    }
}

\begin{tikzpicture}
    \calendar (cal) [dates=2013-02-1 to 2013-02-28,week list,
    ColorDay={2-7}{red},
    ColorDay={2-16}{blue, font=\bfseries}];
\end{tikzpicture}
\end{document}

相关内容