Downloaded contextbeta as usual: ConTeXt ver: 2010.03.18 14:42 MKIV fmt: 2010.3.20 int: english/ english Suddenly got this error from: \setupinterlinespace[big] ! Missing number, treated as zero. <to be read again> b <argument> b ig \doifdimensionelse ...mensionelse \scratchdimen #1 pt\relax \dosetspecifiedrelativeinterlinespace ...else {#1} {\setupspecifiedinterline... \dosetuprelativeinterlinespace ...erlinespace {#1} \fi \next1 #1,->\dosetuprelativeinterlinespace {#1} \doprocesscommaitem Then did luatools --generate that now broke: 02 ~/Documents/TeX/context/beta/bin: luatools --generate LuaTools | fileio: variable 'SELFAUTOLOC' set to '/Users/hans/ Documents/TeX/context/beta/bin' LuaTools | fileio: variable 'SELFAUTODIR' set to '/Users/hans/ Documents/TeX/context/beta' LuaTools | fileio: variable 'SELFAUTOPARENT' set to '/Users/hans/ Documents/TeX/context' LuaTools | fileio: variable 'TEXMFCNF' set to '{$SELFAUTODIR, $SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}' LuaTools | fileio: no cnf files found (TEXMFCNF may not be set/known) LuaTools | LuaTools | runtime: 0.053 seconds 103 ~/Documents/TeX/context/beta/bin: Switching back to my previous version of contextbeta gave no problems. Processing lustools --generate without problems. Especially the previous culprit now does: LuaTools | fileio: variable 'TEXMFCNF' set to '{$SELFAUTODIR, $SELFAUTOPARENT}{,{/share,}/texmf{-local,.local,}/web2c}' LuaTools | fileio: loading configuration file '/Users/hans/Documents/ TeX/context/beta/tex/texmf/web2c/texmfcnf.lua' WHAT HAPPENED? Hans van der Meer
Am 20.03.10 13:13, schrieb Hans van der Meer:
WHAT HAPPENED?
Please don't shout as us, it's also polite to provide a minimal example. Now to your problem. Hans added recently a interlinespace key to \setuphead and modified \setupinterlinespace for this, the problem with this is that he need to check wheter the argument is a dimension (e.g. 12pt) or a keyword (e.g. big) but the \doifdimensionelse macro fails in this case. Till Hans fix this here is a adapted dimen checker from KOMA Script. \unprotect \definesystemconstant {pc} \definesystemconstant {cm} \definesystemconstant {dd} \definesystemconstant {cc} \def\ifdimen#1% {\begingroup\donetrue\let\next\test@posdimen \expandafter\test@dimen#1\next \ifdone \endgroup\expandafter\firstoftwoarguments \else \endgroup\expandafter\secondoftwoarguments \fi} \def\test@dimen#1% {\ifx-#1\else\ifx +#1\else \def\next{\let\next\test@posdimen\next#1}% \fi\fi \next} \def\test@posdimen#1% {\ifx\next#1% \donefalse\let\next\relax \else \if.#1\else\if,#1\else \scratchcounter=% \expandafter\expandafter\expandafter\number\expandafter`#1\relax \ifnum\scratchcounter>47 \ifnum\scratchcounter<58 \else\def\next{\test@dimunt#1}\fi \else\def\next{\test@dimunt#1}\fi \fi\fi \fi \next} \def\test@dimunt#1\next {\expandafter\test@trueunt#1truetrue\test@trueunt} \def\test@trueunt#1true#2true#3\test@trueunt {\edef\!!stringa{#1}% \ifx\!!stringa\empty \test@@ifdimunt{#2}% \else \test@@ifdimunt{#1}% \fi} %\def\test@@ifdimunt#1% % {\donefalse % \doifelse{#1}\s!pt\donetrue % {\doifelse{#1}\s!pc\donetrue % {\doifelse{#1}\s!in\donetrue % {\doifelse{#1}\s!bp\donetrue % {\doifelse{#1}\s!cm\donetrue % {\doifelse{#1}\s!mm\donetrue % {\doifelse{#1}\s!dd\donetrue % {\doifelse{#1}\s!cc\donetrue % {\doifelse{#1}\s!sp\donetrue % {\doifelse{#1}\c!ex\donetrue % {\doif{#1}\c!em\donetrue}}}}}}}}}}} \def\test@@ifdimunt#1% {\edef\!!stringa{#1}% \donefalse \ifx\!!stringa\s!pt\donetrue\else \ifx\!!stringa\s!pc\donetrue\else \ifx\!!stringa\s!in\donetrue\else \ifx\!!stringa\s!bp\donetrue\else \ifx\!!stringa\s!cm\donetrue\else \ifx\!!stringa\s!mm\donetrue\else \ifx\!!stringa\s!dd\donetrue\else \ifx\!!stringa\s!cc\donetrue\else \ifx\!!stringa\s!sp\donetrue\else \ifx\!!stringa\c!ex\donetrue\else \ifx\!!stringa\c!em\donetrue \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} \protect \starttext 12pt: \ifdimen{12pt}{yes}{no} big: \ifdimen{big}{yes}{no} 34cm: \ifdimen{34cm}{yes}{no} \dorecurse{100000}{\ifdimen{34cm}{}{}} % \doifelse: 8.6s, \ifx: 7.7s \stoptext Wolfgang
On 20-3-2010 17:57, Wolfgang Schuster wrote:
Am 20.03.10 13:13, schrieb Hans van der Meer:
WHAT HAPPENED?
Please don't shout as us, it's also polite to provide a minimal example.
Now to your problem.
Hans added recently a interlinespace key to \setuphead and modified \setupinterlinespace for this, the problem with this is that he need to check wheter the argument is a dimension (e.g. 12pt) or a keyword (e.g. big) but the \doifdimensionelse macro fails in this case.
Till Hans fix this here is a adapted dimen checker from KOMA Script.
\unprotect
\definesystemconstant {pc} \definesystemconstant {cm} \definesystemconstant {dd} \definesystemconstant {cc}
\def\ifdimen#1% {\begingroup\donetrue\let\next\test@posdimen \expandafter\test@dimen#1\next \ifdone \endgroup\expandafter\firstoftwoarguments \else \endgroup\expandafter\secondoftwoarguments \fi}
\def\test@dimen#1% {\ifx-#1\else\ifx +#1\else \def\next{\let\next\test@posdimen\next#1}% \fi\fi \next}
\def\test@posdimen#1% {\ifx\next#1% \donefalse\let\next\relax \else \if.#1\else\if,#1\else \scratchcounter=% \expandafter\expandafter\expandafter\number\expandafter`#1\relax \ifnum\scratchcounter>47 \ifnum\scratchcounter<58 \else\def\next{\test@dimunt#1}\fi \else\def\next{\test@dimunt#1}\fi \fi\fi \fi \next}
\def\test@dimunt#1\next {\expandafter\test@trueunt#1truetrue\test@trueunt}
\def\test@trueunt#1true#2true#3\test@trueunt {\edef\!!stringa{#1}% \ifx\!!stringa\empty \test@@ifdimunt{#2}% \else \test@@ifdimunt{#1}% \fi}
%\def\test@@ifdimunt#1% % {\donefalse % \doifelse{#1}\s!pt\donetrue % {\doifelse{#1}\s!pc\donetrue % {\doifelse{#1}\s!in\donetrue % {\doifelse{#1}\s!bp\donetrue % {\doifelse{#1}\s!cm\donetrue % {\doifelse{#1}\s!mm\donetrue % {\doifelse{#1}\s!dd\donetrue % {\doifelse{#1}\s!cc\donetrue % {\doifelse{#1}\s!sp\donetrue % {\doifelse{#1}\c!ex\donetrue % {\doif{#1}\c!em\donetrue}}}}}}}}}}}
\def\test@@ifdimunt#1% {\edef\!!stringa{#1}% \donefalse \ifx\!!stringa\s!pt\donetrue\else \ifx\!!stringa\s!pc\donetrue\else \ifx\!!stringa\s!in\donetrue\else \ifx\!!stringa\s!bp\donetrue\else \ifx\!!stringa\s!cm\donetrue\else \ifx\!!stringa\s!mm\donetrue\else \ifx\!!stringa\s!dd\donetrue\else \ifx\!!stringa\s!cc\donetrue\else \ifx\!!stringa\s!sp\donetrue\else \ifx\!!stringa\c!ex\donetrue\else \ifx\!!stringa\c!em\donetrue \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
\protect
\starttext
12pt: \ifdimen{12pt}{yes}{no}
big: \ifdimen{big}{yes}{no}
34cm: \ifdimen{34cm}{yes}{no}
\dorecurse{100000}{\ifdimen{34cm}{}{}} % \doifelse: 8.6s, \ifx: 7.7s
\stoptext
\chardef\d!pt\plusone \chardef\d!pc\plusone \chardef\d!in\plusone \chardef\d!bp\plusone \chardef\d!cm\plusone \chardef\d!mm\plusone \chardef\d!dd\plusone \chardef\d!cc\plusone \chardef\d!sp\plusone \chardef\d!ex\plusone \chardef\d!em\plusone \def\test@@ifdimunt#1% {\ifcsname d!#1\endcsname \donetrue \else \donefalse \fi} \testfeatureonce{100000}{\ifdimen{34cm}{}{}} 10% faster ... anyhow, quite ugly code ... i'll have a look at why the normal one fails ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
Am 20.03.10 18:49, schrieb Hans Hagen:
\chardef\d!pt\plusone \chardef\d!pc\plusone \chardef\d!in\plusone \chardef\d!bp\plusone \chardef\d!cm\plusone \chardef\d!mm\plusone \chardef\d!dd\plusone \chardef\d!cc\plusone \chardef\d!sp\plusone \chardef\d!ex\plusone \chardef\d!em\plusone
\def\test@@ifdimunt#1% {\ifcsname d!#1\endcsname \donetrue \else \donefalse \fi}
\testfeatureonce{100000}{\ifdimen{34cm}{}{}}
10% faster ... anyhow, quite ugly code And I thought you show us a Lua solution. i'll have a look at why the normal one fails \doifdimensionelse expects a dimension or a number but not characters.
\starttext \doifdimensionelse{12pt}{yes}{no} % works \doifdimensionelse{0}{yes}{no} % works \doifdimensionelse{}{yes}{no} % fails \doifdimensionelse{`a}{yes}{no} % works \doifdimensionelse{a}{yes}{no} % fails \stoptext Wolfgang
On 20-3-2010 20:11, Wolfgang Schuster wrote:
Am 20.03.10 18:49, schrieb Hans Hagen:
\chardef\d!pt\plusone \chardef\d!pc\plusone \chardef\d!in\plusone \chardef\d!bp\plusone \chardef\d!cm\plusone \chardef\d!mm\plusone \chardef\d!dd\plusone \chardef\d!cc\plusone \chardef\d!sp\plusone \chardef\d!ex\plusone \chardef\d!em\plusone
\def\test@@ifdimunt#1% {\ifcsname d!#1\endcsname \donetrue \else \donefalse \fi}
\testfeatureonce{100000}{\ifdimen{34cm}{}{}}
10% faster ... anyhow, quite ugly code And I thought you show us a Lua solution. i'll have a look at why the normal one fails \doifdimensionelse expects a dimension or a number but not characters.
\starttext
\doifdimensionelse{12pt}{yes}{no} % works
\doifdimensionelse{0}{yes}{no} % works
\doifdimensionelse{}{yes}{no} % fails
\doifdimensionelse{`a}{yes}{no} % works
\doifdimensionelse{a}{yes}{no} % fails
\stoptext
i can bring the tex version (different approach btw) down to 0.625 seconds while a lua variant does 1.310 seconds Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
On 20 mrt 2010, at 17:57, Wolfgang Schuster wrote:
Am 20.03.10 13:13, schrieb Hans van der Meer:
WHAT HAPPENED?
Please don't shout as us, it's also polite to provide a minimal example.
Do not read me wrong. It is not shouting at anyone. Just "embolding" and utter despair. If you feel in anyway attacked, sorry, it wasn't my intention (and will never be). As for the minimal example, that was implicite in the problem: the minimal example in this case is the distribution itself. Hans van der Meer
participants (4)
-
Hans Hagen
-
Hans van der Meer
-
views63
-
Wolfgang Schuster