我正在尝试进行 tikz 中使用的计算。这是我当前的代码:
\def\monthtabpos#1%
{\ifthenelse{#1<7}
{\dimexpr \numexpr -3*#1 \relax cm}
{\dimexpr \numexpr -3*(#1-6) \relax cm}
}
\newcommand{\monthtab}[2]{
\shorthandoff{;}
\begin{tikzpicture}[remember picture,overlay]
\node[yshift=\monthtabpos{#2},xshift=-0.5cm] at (current page.north east) {
\tikz\shade[shading=axis,bottom color=white,top color=gray!50,shading angle=-90]
(0,0) rectangle (1cm,3cm) node[rotate=90,pos=0.5] {\Large\scshape #1};
};
\end{tikzpicture}
}
这个想法是\monthtabpos
计算图片的垂直位置。然后调用此代码来\titleformat
定位各部分的标签:
% Tune section headings
\renewcommand\thesection{\arabic{section}}
\titleformat{name=\section,page=even}[display]
{\newpage\secstyle} % format
{\large\makedate{\thesection}~\chaphead} % label
{10pt} %sep
{\vspace{-5mm}\filcenter\textls[-35]} %before
\titleformat{name=\section,page=odd}[display]
{\newpage\secstyle} % format
{\large\makedate{\thesection}~\chaphead} % label
{10pt} %sep
{\vspace{-5mm}\filcenter\textls[-35]} %before
[\monthtab{\chaphead}{\arabic{chapter}}] % after
\titlespacing{\section}{0pt}{*}{*-2}
当我构建此代码时,我得到:
LaTeX Warning: Unsynchronized `section' title on page 7.
! Argument of \XC@definec@lor has an extra }.
<inserted text>
\par
l.2 \dvday{Créé à son image}
请注意,如果我yshift=\monthtabpos{#2}
用替换yshift=-3*{#2}cm
,它可以正常工作(除了 时我没有得到我想要的效果#2 > 6
),并且我已经检查过\monthtabpos
返回预期的字符串。
我也尝试过在 tikz 中定义一个本地宏:
\newcommand{\monthtab}[2]{
\shorthandoff{;}
\begin{tikzpicture}[remember picture,overlay]
\node let \tabpos = (\monthtabpos{#2}) in
[yshift=\tabpos,xshift=-0.5cm] at (current page.north east) {
\tikz\shade[shading=axis,bottom color=white,top color=gray!50,shading angle=-90]
(0,0) rectangle (1cm,3cm) node[rotate=90,pos=0.5] {\Large\scshape #1};
};
\end{tikzpicture}
}
但这并没有什么帮助。
请注意,这确实有效(但我认为它真的很丑陋):
\newcommand{\monthtab}[2]{
\shorthandoff{;}
\ifthenelse{#2<7}{
\begin{tikzpicture}[remember picture,overlay]
\node[yshift=-3*{#2}cm,xshift=-0.5cm] at (current page.north east) {
\tikz\shade[shading=axis,bottom color=white,top color=gray!50,shading angle=-90]
(0,0) rectangle (1cm,3cm) node[rotate=90,pos=0.5] {\Large\scshape #1};
};
\end{tikzpicture}
}
{
\begin{tikzpicture}[remember picture,overlay]
\node[yshift=18cm-3*{#2}cm,xshift=-0.5cm] at (current page.north east) {
\tikz\shade[shading=axis,bottom color=white,top color=gray!50,shading angle=-90]
(0,0) rectangle (1cm,3cm) node[rotate=90,pos=0.5] {\Large\scshape #1};
};
\end{tikzpicture}
}
}
答案1
我认为计算这个的最简单方法是yshift={-3*(mod(#2-1,6)+1)*1cm}
,这也适用于第 13、14 章等。
\mod(a,b)
给出 a 除以 b 的余数。因此,当=1,2,3,...mod(#2-1,6)
时,将给出 0,1,2,3,4,5,0,1,2,...#2
请参阅 v2.10 TikZ 手册中的第 63.2 章,了解可用于在 TikZ 内进行计算的函数列表(例如,它有ifthenelse
)。