\doifelse not working, \doiftextelse breaking
Dear list, I have the following sample: \starttext \startluacode function document.starts_with(str, start) if str:sub(1, #start) == start then context(start) end end \stopluacode \unexpanded\def\startswith[#1][#2] {\cldcontext{document.starts_with("#1", "#2")}} \startswith[getjobid764572121][getjobid] yes: \doifelse{\startswith[getjobid764572121][getjobid]}{getjobid} {yes}{no} no: \doifelse{\startswith[getjobid764572121][getjobid]}{} {yes}{no} %% \doiftextelse{\startswith[getjobid764572121][getjobid]} % {yes}{no} \stoptext I don’t know why comparing doesn’t work with \doifelse. I’m surprised that \doiftextelse breaks when \startswidth if inside. How could i make \startswith work inside \doiftext? Or how could I catch positives when command contents start with a given string? Many thanks for your help, Pablo -- http://www.ousia.tk
Pablo Rodriguez schrieb am 09.10.2020 um 15:58:
Dear list,
I have the following sample:
\starttext \startluacode function document.starts_with(str, start) if str:sub(1, #start) == start then context(start) end end \stopluacode
\unexpanded\def\startswith[#1][#2] {\cldcontext{document.starts_with("#1", "#2")}}
You need a % at the end of the definition, otherwise TeX expects a space after the second argument to end the command. \unexpanded\def\startswith[#1][#2]% {...} To improve your command and allow a space between both arguments you can use \unexpanded\def\startswith {\dodoubleargument\dostartswith} \def\dostartswith[#1][#2]% {...} or just add a dummy parameter and use #1 and #3 to pass the arguments \unexpanded\def\startswith[#1]#2[#3]% {...} Wolfgang
On 10/9/20 4:08 PM, Wolfgang Schuster wrote:
[..] You need a % at the end of the definition, otherwise TeX expects a space after the second argument to end the command.
\unexpanded\def\startswith[#1][#2]% {...}
Many thanks for your ultra-fast reply, Wolfgang. Now I see muy mistake. In my previous command definitions with two arguments, the opening brace was right after the second argument.
To improve your command and allow a space between both arguments you can use
\unexpanded\def\startswith {\dodoubleargument\dostartswith}
\def\dostartswith[#1][#2]% {...}
Now I see with \dosingleargument, \dodoubleargument and \dotripleargument are there. Which are the improvements to the command added by \do*argument?
or just add a dummy parameter and use #1 and #3 to pass the arguments
\unexpanded\def\startswith[#1]#2[#3]% {...}
This is shorter, but it looks to creepy (even for my code). Many thanks for your help, Pablo -- http://www.ousia.tk
Pablo Rodriguez schrieb am 09.10.2020 um 16:31:
To improve your command and allow a space between both arguments you can use
\unexpanded\def\startswith {\dodoubleargument\dostartswith}
\def\dostartswith[#1][#2]% {...} Now I see with \dosingleargument, \dodoubleargument and \dotripleargument are there.
Which are the improvements to the command added by \do*argument?
You can add a space between both arguments. You version expects this \startswith [...][...] while the extended code allows this \startswith [...] [...] Wolfgang
On 10/9/20 5:10 PM, Wolfgang Schuster wrote:
Pablo Rodriguez schrieb am 09.10.2020 um 16:31:
[...] Which are the improvements to the command added by \do*argument?
You can add a space between both arguments. You version expects this
\startswith [...][...]
while the extended code allows this
\startswith [...] [...]
Many thanks for your explanation, Wolfgang. Pablo -- http://www.ousia.tk
participants (2)
-
Pablo Rodriguez
-
Wolfgang Schuster