计算 tikz 中的位置

计算 tikz 中的位置

我正在尝试进行 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)。

相关内容