Isso é o que estou fazendo:
\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\newcommand{\zzz}{5}
\setlength{\foo}{\zzz * 2in}
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}
Estou entendendo:
! Illegal unit of measure (pt inserted).
<to be read again>
*
l.5 \setlength{\foo}{\zzz * 2in}
Como fazer certo?
Responder1
A ordem dos argumentos da \setlength
instrução é importante. Seu código tem
\newlength{\foo}
\newcommand{\zzz}{5}
\setlength{\foo}{\zzz * 2in}
O TeX começa com um número escalar (5) e é instruído a multiplicá-lo por um comprimento (2 pol.). Tais alterações de tipo instantâneas - aqui: de escalar para variável de comprimento - não são permitidas.
Em contraste, a sintaxe da expressão
\setlength{\foo}{2in * \zzz}
é perfeitamente aceitável, pois o TeX começa com um comprimento (2in) e o multiplica por um escalar (5), resultando em outro comprimento (10in).
Responder2
\documentclass{article}
\usepackage{calc}
\newlength{\foo}
\newcommand{\zzz}{5}
\setlength{\foo}{ 2in * \zzz }
\usepackage[paperwidth=\foo,paperheight=\foo]{geometry}
\begin{document}
\end{document}