Gerion Entrup schrieb am 25.01.2024 um 09:18:
Hi,
I want to make a proper definition of a new command to be able to process it in Lua. I found something on StackOverflow [1] but that breaks in enumeration _and_ when interaction is enabled and I do not understand why? Can you give me some help here?
I want to make commands like \foo{bla} and \foo[b]{bla} possible at the same time. Here is a minimal example (also attached):
``` \startluacode function userdata.my_command(keywords, text) commands.writestatus("test", string.format("text: %s, config: %s", text, keywords)) local cfg = utilities.parsers.settings_to_hash(keywords)
if cfg['emph'] ~= nil then context("\\emph{" .. text .. "}") elseif cfg['bold'] ~= nil then context("\\bold{" .. text .. "}") else context(text) end end \stopluacode
\startluacode function userdata.my_command(keywords, text) local keywords = utilities.parsers.settings_to_hash(keywords) if keywords['emph'] then context.emph(text) elseif keywords['bold'] then context.bold(text) else context(text) end end \stopluacode
% without that line there is no problem \setupinteraction[state=start]
\defineenumeration[enu][text=Enu]
\defineenumeration[enu][text=Enu,title=yes]
\unprotect \def\mc{\dosingleempty\do_my_command} \def\do_my_command[#1]#2{% \iffirstargument{% \ctxlua{userdata.my_command('#1', [==[#2]==])}% }\else {% \ctxlua{userdata.my_command('', [==[#2]==])}% }\fi } \protect
\tolerant\protected\def\mc[#1]#2% {\ctxlua{userdata.my_command("#1","#2")}} Wolfgang