tcolorbox: erreur avec \ settototalheight lors du calcul de la hauteur de l'en-tête avant de la transmettre au package geometry

Nov 28 2020

Suite à cette réponse , j'aimerais savoir pourquoi ce qui suit ne se compile pas et donne cette erreur

! Séquence de contrôle non définie. \ tcb @ startbox ... x} {\ tcb @ w @ upper} \ tcb @ lua @ color {tcbcolupper} \ kvtcb @ fontup ...

\documentclass{exam}
\usepackage{graphicx}
\usepackage[xparse,breakable,raster,skins]{tcolorbox}
\usepackage{calc}

\newcommand{\exProgram}{3\textsuperscript{rd} Year}
\newcommand{\CourseName}{Engineering}
\newcommand*{\CourseCode}{311}
\newcommand*{\exMidFinal}{Midterm}
\newcommand*{\exSemester}{Fall}

\newcommand\headerBody{%
    \begin{tcolorbox}[
        raster multicolumn = 3
        ]
        \begin{tcbitemize}[
            raster force size=false,
            raster columns=2,
            valign=bottom,
            raster equal skip = 0mm,
            blankest,
            ]
            \tcbitem[add to width = 2cm, halign = left,]
            University\\ Faculty\\
            \exProgram
            \tcbitem[add to width =-2cm, halign = right]  \includegraphics[height=20 mm]{example-image}
        \end{tcbitemize}
    \end{tcolorbox}%
    %
    \vspace{5pt}\hrule\vspace{5pt}%
    %
    \begin{tcolorbox}[left=0pt,right=0pt]
        \exMidFinal\\
        \exSemester
    \end{tcolorbox}
    \begin{tcolorbox}[before upper*=\centering]
        Course Code: \textbf{\CourseCode}
    \end{tcolorbox}
    \begin{tcolorbox}[halign=right]
        1\\
        2
    \end{tcolorbox}%
    %
    \vspace{5pt}\hrule\vspace{5pt}%
    %
    \begin{tcolorbox}[
        before upper*=\centering, equal height group=A,
        interior engine = standard,
        colback = gray,
        raster multicolumn = 3,
        top = 5pt, bottom = 5pt
        ]
        \textbf{\CourseName}
    \end{tcolorbox}%
    %
    \vspace{5pt}\hrule\vspace{5pt}%
    %
    \begin{tcolorbox}[
        before upper*=\centering,
        equal height group=A,
        raster multicolumn = 3,
        ]
        This exam contains
    \end{tcolorbox}%
}

\newcommand\headerContents{%
    \begin{minipage}{\linewidth}%
        \begin{tcbraster}[
            raster columns=3, raster rows=3,
            raster equal height = rows,
            raster every box/.style={minimum for current equal height group = 8 mm},
            valign=center,
            raster equal skip = 0mm,
            top = 0mm, bottom = 0mm,
            blankest,
            nobeforeafter,
            ]
            \headerBody%
            \vspace*{5pt}%
            \hrule%
        \end{tcbraster}%
    \end{minipage}%
}

\newlength{\headerTotalHeight}
\settototalheight\headerTotalHeight{\headerContents}


\pagestyle{headandfoot}
\firstpageheader{}{\headerContents}{}

\usepackage[
a4paper,
includehead,
top = 0mm,
headheight = \headerTotalHeight,
showframe
]{geometry}

\begin{document}
    text
\end{document}

Réponses

5 egreg Nov 28 2020 at 17:06

Vous ne devriez jamais mesurer les choses dans le préambule. Les paramètres de police peuvent être retardés au début du document.

Faites le réglage au bon endroit:

\AtBeginDocument{\settototalheight\headerTotalHeight{\headerContents}}

Maintenant, si vous voulez savoir pourquoi cela fonctionnait mais échoue maintenant? Un changement dans tcolorbox.sty, visant à exploiter la gestion des couleurs LuaTeX si disponible, a été introduit. Cela nécessite une définition \tcb@lua@colorappropriée et l'auteur du package a choisi de le faire au début du document.

Cela signifie que la signification de \tcb@lua@colorn'est pas encore disponible dans le préambule du document, d'où l'erreur.