"Missing number, treated as zero" error when using \definefont with \define'd dimension
![](https://secure.gravatar.com/avatar/6707d79a6a5dc9090b58e333d067593e.jpg?s=120&d=mm&r=g)
Hello, I reported a Missing Number error back in December (thread at http://www.ntg.nl/pipermail/ntg-context/2012/070471.html) but got sidetracked on another issue before finding a resolution. Now I'm back to the Missing Number error, and I have a short example that reproduces it: \define\largefontsize{13pt} % Works fine: \definefont[SerifL][Arial at 13pt] % Leads to error: \definefont[SerifL][Arial at \largefontsize] % "Missing number, treated as zero" error thrown on the following line: \starttext \SerifL{Hello} \stoptext Note that the SerifL font definition works fine (no error) if I hard-code in "13pt" instead of using an intervening \largefontsize definition. But if I hard-code the point size, it would hamper the modularity of our font configuration and the use of modes in which different size fonts are used. Maybe \define is just the wrong command to use when creating an identifier for a specified dimension? I tried changing it to \def and the error went away! I looked up the documentation of \define (http://wiki.contextgarden.net/Command/define) and \def, and couldn't find any obvious difference, except that \def is TeX and \define is ConTeXt. The wiki page I just linked to mentions differences between MkII and MkIV, but this error occurs in both (in XeTeX and LuaTeX). Can someone help me understand why I should not use \define for this case? (Or in general, when I should not use \define?) Or does the problem lie somewhere else? Thanks, Lars
![](https://secure.gravatar.com/avatar/b79687264c3e06cba13b54d05b12a9f5.jpg?s=120&d=mm&r=g)
Am 21.03.2013 um 20:58 schrieb Lars Huttar
Hello,
I reported a Missing Number error back in December (thread at http://www.ntg.nl/pipermail/ntg-context/2012/070471.html) but got sidetracked on another issue before finding a resolution. Now I'm back to the Missing Number error, and I have a short example that reproduces it:
\define\largefontsize{13pt}
% Works fine: \definefont[SerifL][Arial at 13pt] % Leads to error: \definefont[SerifL][Arial at \largefontsize]
% "Missing number, treated as zero" error thrown on the following line: \starttext \SerifL{Hello} \stoptext
Note that the SerifL font definition works fine (no error) if I hard-code in "13pt" instead of using an intervening \largefontsize definition. But if I hard-code the point size, it would hamper the modularity of our font configuration and the use of modes in which different size fonts are used.
Maybe \define is just the wrong command to use when creating an identifier for a specified dimension? I tried changing it to \def and the error went away!
I looked up the documentation of \define (http://wiki.contextgarden.net/Command/define) and \def, and couldn't find any obvious difference, except that \def is TeX and \define is ConTeXt. The wiki page I just linked to mentions differences between MkII and MkIV, but this error occurs in both (in XeTeX and LuaTeX).
Can someone help me understand why I should not use \define for this case? (Or in general, when I should not use \define?) Or does the problem lie somewhere else?
Commands created with \define aren’t expandable, i.e. when the content of \definefont is passed to Lua \largefontsize remains a TeX macro and isn’t converted to the dimension. To get a expandable macro use \defineexpandable to create \largefontsize (untested). Wolfgang
participants (2)
-
Lars Huttar
-
Wolfgang Schuster