5
\setcounter{numofgaps}{\numexpr\number\value{numofboxes}-1}
\setlength{\truetextsectionwidth}{\textsectionwidth-\number\value{numofgaps}\gapwidth}

The above code is a snippet from the answer of How to arrange the text and image in one beamer frame?.

  1. I know the \numexpr...\relax pair is for expression evaluation. The above \setcounter command doesn't have \relax (Does the end of the parenthesis after -1 in the code {\numexpr\number\value{numofboxes}-1} have the same effect?)
  2. what is the purpose of the command \number (if I don't use it, will something be wrong?)
  3. \number\value{numofgaps}\gapwidth means numofgaps multiply gapwidth, but why not add the * symbol stand for multiplication between \value{numofgaps} and \gapwidth.
7

The \number primitive is not needed in those contexts. But you need \dimexpr in \setlength, unless you load calc.

Example:

\documentclass{article}

\newcounter{numofboxes}
\newcounter{numofgaps}
\newlength{\textsectionwidth}
\newlength{\truetextsectionwidth}
\newlength{\gapwidth}

\setlength{\gapwidth}{10pt} % an easy number
\setlength{\textsectionwidth}{300pt} % an easy number
\setcounter{numofboxes}{11} % an easy number

\begin{document}

\setcounter{numofgaps}{\numexpr\value{numofboxes}-1}
\setlength{\truetextsectionwidth}{\dimexpr\textsectionwidth-\value{numofgaps}\gapwidth}

\texttt{numofgaps = \thenumofgaps}

\texttt{\string\truetextsectionwidth = \the\truetextsectionwidth}

\end{document}

enter image description here

Inside \numexpr any <number> can be used, and \value{numofboxes} fits the syntax of <number>.

A length register can be multiplied by a <factor> which basically is a <number> or an explicit decimal number.

Note that inside \dimexpr, something like

\number\value{numofgaps}*\gapwidth

would be illegal, because an integer multiplier must go after the length register; \gapwidth*\number\value{numofgaps} would be legal, but is not really needed.


The code \value{counter} expands to \csname c@counter\endcsname, so it's equivalent to \c@counter, where \c@counter is the name of the integer register allocated when \newcounter{counter} is processed. Inside \numexpr, any integer register name can be used directly. There's no need to make it into an explicit number by means of \number. The construction \number\value{counter} has its uses, but is not needed when TeX expects a <number>.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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