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 \setlength
instrucció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}