On 5/28/2020 11:24 PM, context@vivaldi.net wrote:
Hello,
one more question - why macros \Undefined and \DoNothing show "defined" although I (tried to) undefine them?
---- \starttext \def\MyMacro{Ahoj} \def\MyMac#1#2{Something}
\def\Undefined{} \let\Undefined\undefined
\def\DoNothing{} \let\DoNothing\donothing
\startluacode local str = { [true] = "defined", [false] = "undefined" }
local function whatever(s) context.type("\\" .. s) context(" is " .. (tokens.defined(s) and "defined" or "undefined")) --% Hans' way context(" and is " .. str[token.is_defined(s)] .. ".") --% Henri's way context.par() end
whatever("MyMacro") whatever("MyMacroD") whatever(" ") whatever("-") whatever("Undefined") whatever("DoNothing") \stopluacode
%\Undefined % Causes "! Undefined control sequence" \stoptext ----
Gives:
" \MyMacro is defined and is defined. \MyMacroD is undefined and is undefined. \ is defined and is defined. \- is defined and is defined. \Undefined is defined and is defined. \DoNothing is defined and is defined. " Because the macro actually *is* defined: as soon as tex sees
\foo it reserves the name and gives it the meaning undefined, so even \undefined is defined. Anyway, that is why we have \ifdefined that does a different kind of checking. In retrospect, that is a better one, so I'll adapt that in lmtx. \starttext \let\MyMacroA\undefined \startluacode local function whatever(s) context.type("\\" .. s) context(" is " .. (tokens.defined(s,true) and "defined" or "undefined")) --% Hans' way context(" and has meaning " .. (tokens.defined(s) and "defined" or "undefined")) --% Hans' way context.par() end whatever("MyMacroA") whatever("MyMacroB") \stopluacode \stoptext \MyMacroA is defined and has meaning undefined \MyMacroB is undefined and has meaning undefined You can do this in current luatex/mkiv: if CONTEXTLMTXMODE == 0 then local d = tokens.defined local c = tokens.create function tokens.defined(s,b) if b then return d(s) else return c(s).cmd_name == "undefined_cmd" end end end Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------