¿Por qué no puedo multiplicar el tamaño por un número entero en calc?

¿Por qué no puedo multiplicar el tamaño por un número entero en calc?

Esto es lo que estoy haciendo:

\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\newcommand{\zzz}{5}
\setlength{\foo}{\zzz * 2in}
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}

Me estoy poniendo:

! Illegal unit of measure (pt inserted).
<to be read again>
                   *
l.5 \setlength{\foo}{\zzz * 2in}

¿Cómo hacerlo bien?

Respuesta1

El orden de los argumentos de la \setlengthinstrucción es importante. Tu código tiene

\newlength{\foo}
\newcommand{\zzz}{5}
\setlength{\foo}{\zzz * 2in}

TeX comienza con un número escalar (5) y se le dice que lo multiplique por una longitud (2 pulgadas). Estos cambios de tipo sobre la marcha (aquí: de escalar a variable de longitud) no están permitidos.

Por el contrario, la sintaxis de la expresión

\setlength{\foo}{2in * \zzz}

es perfectamente aceptable, ya que TeX comienza con una longitud (2 pulgadas) y la multiplica por un escalar (5), lo que da como resultado otra longitud (10 pulgadas).

Respuesta2

\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\newcommand{\zzz}{5}
\setlength{\foo}{ 2in * \zzz }
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}

información relacionada