5

I created a course summary box. In order to distinguish the summaries by school year, I have put an optional argument that displays the latter in the upper left corner (highlighted in yellow on the screenshot).

enter image description here

To display this school year, I write a fraction in the optional argument, like this:

\begin{resume}[$\sfrac{2018}{2019}$]{chapitre 1}
\tcbsubtitle{Définition}

\lipsum[1]
\end{resume}

In order to simplify the code and also to progress in LaTeX, I want to modify this argument to transmit only the year 2018, then automatically calculate the next school year and display the fraction 2018/2019.

To do this, I created a counter called annee,

%\setcounter{annee}{#1}

but when I try to use it in a tcolorbox, I have this error:

! Missing \endcsname inserted.

\documentclass{article}
\usepackage{lipsum}
\usepackage{xfrac}
\usepackage[most]{tcolorbox}

\newcounter{annee}

\tcbset{titreresume/.style={boxed title style={colframe=black!15,colbacktitle=gray!75,
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}}

\tcbset{soustitre/.style={subtitle style={colback=black!7,colframe=black!25,
boxsep=1mm,fontupper={\sffamily\bfseries\large\selectfont\color{black!63}}}}}

\newtcolorbox[auto counter]{resume}[2][]{%
%\setcounter{annee}{#1}
minipage boxed title*=-106mm,
before upper={\textcolor{black!63}{#1 \hfill   #2\hfill\thetcbcounter/\pageref{nombre-de-page}}},
titreresume,soustitre,colframe=black!25,colback=white,leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,label={nombre-de-page},
enhanced,nobeforeafter,lower separated=false,attach boxed title to top center={yshift=-3mm,xshift=-\linewidth/5},
title={\normalsize Résumé}}

\begin{document}

\begin{resume}[$\sfrac{2018}{2019}$]{chapitre 1}
\tcbsubtitle{Définition}

\lipsum[1]
\end{resume}

\newpage

\begin{resume}[$\sfrac{2018}{2019}$]{chapitre 1}

\tcbsubtitle{Propriétés}
\lipsum[2]
\end{resume}
\end{document}

How do I do calculations with a LaTeX counter in a tcolorbox?

Translated with www.DeepL.com/Translator

AndréC
  • 24,137

2 Answers2

11

Well you can't set the counter in the middle of a key-val-list. But beside this you don't need a counter for this:

\documentclass{article}
\usepackage{lipsum}
\usepackage{xfrac}
\usepackage[most]{tcolorbox}


\tcbset{titreresume/.style={boxed title style={colframe=black!15,colbacktitle=gray!75,
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}}

\tcbset{soustitre/.style={subtitle style={colback=black!7,colframe=black!25,
boxsep=1mm,fontupper={\sffamily\bfseries\large\selectfont\color{black!63}}}}}

\newtcolorbox[auto counter]{resume}[2][0]{%
minipage boxed title*=-106mm,
before upper={\textcolor{black!63}{\sfrac{#1}{\the\numexpr#1+1} \hfill   #2\hfill\thetcbcounter/\pageref{nombre-de-page}}},
titreresume,soustitre,colframe=black!25,colback=white,leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,label={nombre-de-page},
enhanced,nobeforeafter,lower separated=false,attach boxed title to top center={yshift=-3mm,xshift=-\linewidth/5},
title={\normalsize Résumé}}

\begin{document}

\begin{resume}[2018]{chapitre 1}
\tcbsubtitle{Définition}

\lipsum[1]
\end{resume}

\newpage

\begin{resume}[2018]{chapitre 1}

\tcbsubtitle{Propriétés}
\lipsum[2]
\end{resume}
\end{document}

enter image description here

Ulrike Fischer
  • 327,261
  • What is \the\numexpr? A TeX register? Or something else? – AndréC Dec 24 '18 at 15:35
  • 2
    https://tex.stackexchange.com/a/88346/2388 – Ulrike Fischer Dec 24 '18 at 15:48
  • Why is it allowed to use \numexpr which is an e-TeX registry and not a LaTeX \newcounter when both are registries (if I'm not mistaken)? – AndréC Dec 25 '18 at 07:21
  • 2
    @AndréC: \newcounter{foo} involves the definition of \c@foo, a TeX counter register, but macro definition isn't expandable; direct usage of \numexpr is expandable... –  Dec 25 '18 at 10:33
  • @ChristianHupfer Is there a list of TeX, LaTeX, e-Tex, etc macros that are expandable? – AndréC Dec 25 '18 at 19:19
  • 1
    @AndréC: I don't know of such list, but that doesn't mean there is none! –  Dec 25 '18 at 22:15
  • The main point is not \setcounter versus \numexpr but the place of the code: I put the \numexpr inside the before upper value, the \setcounter would work there too (but better before the \sfrac). – Ulrike Fischer Dec 26 '18 at 10:04
10

Similar to Ulrike's answer, but using the TeX counter \year by default or adding an optional argument for other years.

I switched also to the \NewTColorBox way, providing better argument control, i.e. using #1 as the usual 1st argument for options.

Of course, there is the caveat, that by recompilation of the file in another year than supposed (i.e. 2018/2019 will be recompiled in, say, 2020/2021) the \the\year approach will change the 'time stamp'

\documentclass{article}
\usepackage{lipsum}
\usepackage{xfrac}
\usepackage[most]{tcolorbox}

\newcounter{annee}

\tcbset{titreresume/.style={boxed title style={colframe=black!15,colbacktitle=gray!75,
leftrule=1.5mm,rightrule=1.5mm,toprule=1.5pt,bottom=0pt,boxsep=1pt}}}

\tcbset{soustitre/.style={subtitle style={colback=black!7,colframe=black!25,
boxsep=1mm,fontupper={\sffamily\bfseries\large\selectfont\color{black!63}}}}}

\NewTColorBox[auto counter]{resume}{+O{}+m+O{\the\year}}{%
%\setcounter{annee}{#1}
minipage boxed title*=-106mm,
before upper={\textcolor{black!63}{\sfrac{#3}{\the\numexpr#3+1} \hfill   #2\hfill\thetcbcounter/\pageref{nombre-de-page}}},
titreresume,soustitre,colframe=black!25,colback=white,leftrule=3mm,rightrule=3mm,toprule=2pt,bottomrule=2pt,left=3pt,right=0pt,top=3mm,
fonttitle=\sffamily\bfseries\large,label={nombre-de-page},
enhanced,nobeforeafter,lower separated=false,attach boxed title to top center={yshift=-3mm,xshift=-\linewidth/5},
title={\normalsize Résumé},#1}

\begin{document}

\begin{resume}{chapitre 1}[2017]
\tcbsubtitle{Définition}

\lipsum[1]
\end{resume}

\clearpage
\begin{resume}{chapitre 1}

\tcbsubtitle{Propriétés}
\lipsum[2]
\end{resume}
\end{document}

enter image description here

  • The page number at the top right is no longer displayed instead of 1/2 it only appears /2 – AndréC Dec 24 '18 at 16:23
  • 2
    @AndréC: I deleted the [auto counter] feature, I reinstalled it and it works again. you are getting into troubles anyway by using the same label more than once... –  Dec 24 '18 at 16:27
  • 4
    +1 just for seeing an answer by you. Frohe Weihnachten! –  Dec 24 '18 at 16:28
  • Indeed, I do not know why this warning appears or how to correct it. LaTeX LaTeX Warning: Label "nombre-de-page" multiply defined. Nevertheless, it works very well with this warning. – AndréC Dec 24 '18 at 16:33
  • Why did you replace \newpage by \clearpage? – AndréC Dec 25 '18 at 06:44
  • 1
    @AndréC: just in case you have floats on the page etc or the tcolorbox itself is floating, you most likely want to have shipped it out before the next page starts. –  Dec 25 '18 at 07:04