Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

I'm trying to do calculation to be used in tikz. Here is my current code:

\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}
}

The idea is that \monthtabpos calculates the vertical position of the picture. This code is then called from \titleformat to position a tab for sections:

% 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}

When I build this code, I get:

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}

Note that if I replace yshift=\monthtabpos{#2} with yshift=-3*{#2}cm, it works fine (except I don't get the effect I want when #2 > 6), and that I have checked that \monthtabpos returns the expected string.

I have also tried defining a local macro in tikz with:

\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}
}

and it doesn't help.

Note that this does work (but is really ugly I think):

\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}
  }
}
share|improve this question
    
The "house style" of TeX.SX is not to have any greeting or closing in the questions or answers. –  Martin Scharrer Apr 13 '11 at 11:04
    
Alright, I'll remember that :-) –  ℝaphink Apr 13 '11 at 11:09
add comment

1 Answer

up vote 4 down vote accepted

I think the easiest way to calculate this is yshift={-3*(mod(#2-1,6)+1)*1cm}, which also works for chapters 13, 14, etc.

\mod(a,b) gives the remainder of the division of a by b. So mod(#2-1,6) will give 0,1,2,3,4,5,0,1,2,... for #2=1,2,3,...

See chapter 63.2 in the v2.10 TikZ manual for a list of functions that are available to do calculations within TikZ (for example it has ifthenelse).

share|improve this answer
    
Using a modulo is definitely a much nicer solution than my \ifthenelse. Thank you. –  ℝaphink Apr 13 '11 at 22:07
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.