Seemingly unused edef prior to an ifx mysteriously affects the outcome of the ifx. Why?Why does this simple ifx test fail?How to display some text based on a condition inside a tabular environment?Macro to do nothing via a defPreserving (and Controlling) ExpandednessWhy does this use of `expandafter` not work?Pre-expansion of moving macro argumentUsing MakeUppercase on expanded macro with argumentDefining an anaphoric macro to define multiple commands based on a templatestoring snapshot of a rapidly changing commandThe laws of expansion (chardeffoo=<number>foo)Why can I not use string to prevent the expansion of csname?
How do I tell my manager that his code review comment is wrong?
Python password manager
Is it cheaper to drop cargo than to land it?
Type-check an expression
Enumerate Derangements
Why wasn't the Night King naked in S08E03?
Can Ghost kill White Walkers or Wights?
What does a yield inside a yield do?
What happens to the Time Stone
Selecting a secure PIN for building access
What is a "listed natural gas appliance"?
Transpose of product of matrices
A non-technological, repeating, phenomenon in the sky, holding its position in the sky for hours
Would "lab meat" be able to feed a much larger global population
I caught several of my students plagiarizing. Could it be my fault as a teacher?
How did Arya get her dagger back from Sansa?
Am I getting DDOS from crawlers?
Would a 1/1 token with persist dying trigger on death effects a second time?
Is induction neccessary for proving that every injective mapping of a finite set into itself is a mapping onto itself?
Theorem won't go to multiple lines and is causing text to run off the page
Number of seconds in 6 weeks
What is the most remote airport from the center of the city it supposedly serves?
How to improve/restore vintage Peugeot bike, or is it even worth it?
Can fracking help reduce CO2?
Seemingly unused edef prior to an ifx mysteriously affects the outcome of the ifx. Why?
Why does this simple ifx test fail?How to display some text based on a condition inside a tabular environment?Macro to do nothing via a defPreserving (and Controlling) ExpandednessWhy does this use of `expandafter` not work?Pre-expansion of moving macro argumentUsing MakeUppercase on expanded macro with argumentDefining an anaphoric macro to define multiple commands based on a templatestoring snapshot of a rapidly changing commandThe laws of expansion (chardeffoo=<number>foo)Why can I not use string to prevent the expansion of csname?
It is my understanding that in ifxxy xx else yy fi
, ifx
does NOT expand its arguments. If you want ifx
to compare the expanded values of x
and y
, then we need to do the expansion ourselves before feeding them to ifx
:
edefxpndXx
edefxpndYy
ifxxpndXxpndY xx else yy fi
asedef
does this expansion for us. This is frequently the case when x
and y
are the arguments in a macro so we really have no idea what kind of quantity they represent.
I was adapting a code snippet I found in user2478's answer to the TeX-SE question Why does this simple ifx test fail? and came up with the following MWE:
documentclassarticle
usepackage[svgnames]xcolor % to get named colors
begindocument
chardefmysteryletter=`H
% loop through A-Z to find out the mystery letter
newcountcurrentchar
currentchar=`A
loop
chardeftemp=thecurrentchar
edeftmptemp%
ifxmysterylettertemp colorRedbftempelsetempfi
advance currentchar by 1
unlessifnum currentchar>90
repeat
enddocument
which, when compiled, generated the output:
which actually is the desired output, but it should NOT have been! I added the statement edeftmptemp
to get the 'expanded' version of temp
intending to change the temp
argument to the ifx
command to tmp
but had not when this document was compiled. Lo and behold, the desired result was printed out! This lead me to believe that the expansion performed by the edeftmptemp
statement was not required, so it was commented out and the document recompiled. This gave the wrong result; the letter H was not bold or red
I note that removing the comment character from the end of the edef
command had the expected affect of adding a space between each letter, but did not prevent the 'H' from being found and highlighted.
So my question is this: How does the unused expansion of temp
by the edef
statement change the comparison performed by the ifx
command? What am I missing here?
macros conditionals expansion
New contributor
add a comment |
It is my understanding that in ifxxy xx else yy fi
, ifx
does NOT expand its arguments. If you want ifx
to compare the expanded values of x
and y
, then we need to do the expansion ourselves before feeding them to ifx
:
edefxpndXx
edefxpndYy
ifxxpndXxpndY xx else yy fi
asedef
does this expansion for us. This is frequently the case when x
and y
are the arguments in a macro so we really have no idea what kind of quantity they represent.
I was adapting a code snippet I found in user2478's answer to the TeX-SE question Why does this simple ifx test fail? and came up with the following MWE:
documentclassarticle
usepackage[svgnames]xcolor % to get named colors
begindocument
chardefmysteryletter=`H
% loop through A-Z to find out the mystery letter
newcountcurrentchar
currentchar=`A
loop
chardeftemp=thecurrentchar
edeftmptemp%
ifxmysterylettertemp colorRedbftempelsetempfi
advance currentchar by 1
unlessifnum currentchar>90
repeat
enddocument
which, when compiled, generated the output:
which actually is the desired output, but it should NOT have been! I added the statement edeftmptemp
to get the 'expanded' version of temp
intending to change the temp
argument to the ifx
command to tmp
but had not when this document was compiled. Lo and behold, the desired result was printed out! This lead me to believe that the expansion performed by the edeftmptemp
statement was not required, so it was commented out and the document recompiled. This gave the wrong result; the letter H was not bold or red
I note that removing the comment character from the end of the edef
command had the expected affect of adding a space between each letter, but did not prevent the 'H' from being found and highlighted.
So my question is this: How does the unused expansion of temp
by the edef
statement change the comparison performed by the ifx
command? What am I missing here?
macros conditionals expansion
New contributor
"Lo and behold", not "low and behold"
– Hammerite
Apr 27 at 22:25
@Hammerite: Thanks, I stand corrected.
– OneMug
2 days ago
1
chardeftemp=thecurrentchar
should always bechardeftemp=currentchar
. There's no point in usingthe
(besides the desire of seeing your code break loose).
– egreg
2 days ago
@egreg: Very true, but such things are not always bad things when it leads to new insight. Thanks for the comment.
– OneMug
2 days ago
add a comment |
It is my understanding that in ifxxy xx else yy fi
, ifx
does NOT expand its arguments. If you want ifx
to compare the expanded values of x
and y
, then we need to do the expansion ourselves before feeding them to ifx
:
edefxpndXx
edefxpndYy
ifxxpndXxpndY xx else yy fi
asedef
does this expansion for us. This is frequently the case when x
and y
are the arguments in a macro so we really have no idea what kind of quantity they represent.
I was adapting a code snippet I found in user2478's answer to the TeX-SE question Why does this simple ifx test fail? and came up with the following MWE:
documentclassarticle
usepackage[svgnames]xcolor % to get named colors
begindocument
chardefmysteryletter=`H
% loop through A-Z to find out the mystery letter
newcountcurrentchar
currentchar=`A
loop
chardeftemp=thecurrentchar
edeftmptemp%
ifxmysterylettertemp colorRedbftempelsetempfi
advance currentchar by 1
unlessifnum currentchar>90
repeat
enddocument
which, when compiled, generated the output:
which actually is the desired output, but it should NOT have been! I added the statement edeftmptemp
to get the 'expanded' version of temp
intending to change the temp
argument to the ifx
command to tmp
but had not when this document was compiled. Lo and behold, the desired result was printed out! This lead me to believe that the expansion performed by the edeftmptemp
statement was not required, so it was commented out and the document recompiled. This gave the wrong result; the letter H was not bold or red
I note that removing the comment character from the end of the edef
command had the expected affect of adding a space between each letter, but did not prevent the 'H' from being found and highlighted.
So my question is this: How does the unused expansion of temp
by the edef
statement change the comparison performed by the ifx
command? What am I missing here?
macros conditionals expansion
New contributor
It is my understanding that in ifxxy xx else yy fi
, ifx
does NOT expand its arguments. If you want ifx
to compare the expanded values of x
and y
, then we need to do the expansion ourselves before feeding them to ifx
:
edefxpndXx
edefxpndYy
ifxxpndXxpndY xx else yy fi
asedef
does this expansion for us. This is frequently the case when x
and y
are the arguments in a macro so we really have no idea what kind of quantity they represent.
I was adapting a code snippet I found in user2478's answer to the TeX-SE question Why does this simple ifx test fail? and came up with the following MWE:
documentclassarticle
usepackage[svgnames]xcolor % to get named colors
begindocument
chardefmysteryletter=`H
% loop through A-Z to find out the mystery letter
newcountcurrentchar
currentchar=`A
loop
chardeftemp=thecurrentchar
edeftmptemp%
ifxmysterylettertemp colorRedbftempelsetempfi
advance currentchar by 1
unlessifnum currentchar>90
repeat
enddocument
which, when compiled, generated the output:
which actually is the desired output, but it should NOT have been! I added the statement edeftmptemp
to get the 'expanded' version of temp
intending to change the temp
argument to the ifx
command to tmp
but had not when this document was compiled. Lo and behold, the desired result was printed out! This lead me to believe that the expansion performed by the edeftmptemp
statement was not required, so it was commented out and the document recompiled. This gave the wrong result; the letter H was not bold or red
I note that removing the comment character from the end of the edef
command had the expected affect of adding a space between each letter, but did not prevent the 'H' from being found and highlighted.
So my question is this: How does the unused expansion of temp
by the edef
statement change the comparison performed by the ifx
command? What am I missing here?
macros conditionals expansion
macros conditionals expansion
New contributor
New contributor
edited 2 days ago
OneMug
New contributor
asked Apr 27 at 16:22
OneMugOneMug
236
236
New contributor
New contributor
"Lo and behold", not "low and behold"
– Hammerite
Apr 27 at 22:25
@Hammerite: Thanks, I stand corrected.
– OneMug
2 days ago
1
chardeftemp=thecurrentchar
should always bechardeftemp=currentchar
. There's no point in usingthe
(besides the desire of seeing your code break loose).
– egreg
2 days ago
@egreg: Very true, but such things are not always bad things when it leads to new insight. Thanks for the comment.
– OneMug
2 days ago
add a comment |
"Lo and behold", not "low and behold"
– Hammerite
Apr 27 at 22:25
@Hammerite: Thanks, I stand corrected.
– OneMug
2 days ago
1
chardeftemp=thecurrentchar
should always bechardeftemp=currentchar
. There's no point in usingthe
(besides the desire of seeing your code break loose).
– egreg
2 days ago
@egreg: Very true, but such things are not always bad things when it leads to new insight. Thanks for the comment.
– OneMug
2 days ago
"Lo and behold", not "low and behold"
– Hammerite
Apr 27 at 22:25
"Lo and behold", not "low and behold"
– Hammerite
Apr 27 at 22:25
@Hammerite: Thanks, I stand corrected.
– OneMug
2 days ago
@Hammerite: Thanks, I stand corrected.
– OneMug
2 days ago
1
1
chardeftemp=thecurrentchar
should always be chardeftemp=currentchar
. There's no point in using the
(besides the desire of seeing your code break loose).– egreg
2 days ago
chardeftemp=thecurrentchar
should always be chardeftemp=currentchar
. There's no point in using the
(besides the desire of seeing your code break loose).– egreg
2 days ago
@egreg: Very true, but such things are not always bad things when it leads to new insight. Thanks for the comment.
– OneMug
2 days ago
@egreg: Very true, but such things are not always bad things when it leads to new insight. Thanks for the comment.
– OneMug
2 days ago
add a comment |
1 Answer
1
active
oldest
votes
chardeftemp=thecurrentchar
edeftmptemp%
tokens defined via chardef
are not expandable, so edeftmptemp
is the same as deftmptemp
It is not clear why you do not expect ifxmysterylettertemp
not to be true if the two tokens are both defined via chardef
with the same number?
I guess your modified version was equivalent to
chardeftemp=thecurrentchar
ifxmysterylettertemp
There the ifx
test happens before the assignment while looking to end the number, you need
chardeftemp=thecurrentcharrelax
ifxmysterylettertemp
or
chardeftemp=currentchar
ifxmysterylettertemp
So your edef
was just acting like relax
terminating the chardef
assignment.
Thanks for the fast response. Still trying to figure out how to use the TeX-SE question and comment editors, please be patient. I had planned on converting this snippet into adefscanAlpha#1{...
so I coded it the way I did expecting the macro argument to be used in theifx
to be somewhat unknown at execution time, say be usingscanAlphaX
which would make the argument to theifx
different from using thechardef
as in the snippet.
– OneMug
Apr 27 at 16:58
As stated, removing theedef
and using eitherchardeftemp=thecurrentcharrelax
orchardeftemp=currentchar
works just fine. Aah, such are the mysteries ofrelax
ing. Not sure if I will ever figure out how torelax
. Thanks again for this answer.
– OneMug
Apr 27 at 17:19
3
@OneMugit'its not really therelax
just that expansion happens when looking for a number,count0=1ifx ab 2else 3fi
sets count0 to 13 with the ifx test happening before the assignment, butcount0=1 ifx ab 2else 3fi
sets count0 to 1
– David Carlisle
Apr 27 at 17:32
Thanks for this illustration. I had not realized that a numeric assignment was so 'aggressive'. I take it that this expansion would continue even farther if that expansion kept producing more numbers, that is, continue until a non-number token was encountered, right? One other issue here, the assignment in your example generates a decimal number. Is it possible to generate numbers in other bases, hexadecimal for instance?
– OneMug
2 days ago
After some reflection about howifx
expands its arguments, it seems that the statement I made in my question that ``ifx
does NOT expand its arguments'' is not strictly correct, as it must surely expand them at least once if that argument is a control sequence. Is that correct?
– OneMug
2 days ago
|
show 2 more comments
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "85"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
OneMug is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f487937%2fseemingly-unused-edef-prior-to-an-ifx-mysteriously-affects-the-outcome-of-the%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
chardeftemp=thecurrentchar
edeftmptemp%
tokens defined via chardef
are not expandable, so edeftmptemp
is the same as deftmptemp
It is not clear why you do not expect ifxmysterylettertemp
not to be true if the two tokens are both defined via chardef
with the same number?
I guess your modified version was equivalent to
chardeftemp=thecurrentchar
ifxmysterylettertemp
There the ifx
test happens before the assignment while looking to end the number, you need
chardeftemp=thecurrentcharrelax
ifxmysterylettertemp
or
chardeftemp=currentchar
ifxmysterylettertemp
So your edef
was just acting like relax
terminating the chardef
assignment.
Thanks for the fast response. Still trying to figure out how to use the TeX-SE question and comment editors, please be patient. I had planned on converting this snippet into adefscanAlpha#1{...
so I coded it the way I did expecting the macro argument to be used in theifx
to be somewhat unknown at execution time, say be usingscanAlphaX
which would make the argument to theifx
different from using thechardef
as in the snippet.
– OneMug
Apr 27 at 16:58
As stated, removing theedef
and using eitherchardeftemp=thecurrentcharrelax
orchardeftemp=currentchar
works just fine. Aah, such are the mysteries ofrelax
ing. Not sure if I will ever figure out how torelax
. Thanks again for this answer.
– OneMug
Apr 27 at 17:19
3
@OneMugit'its not really therelax
just that expansion happens when looking for a number,count0=1ifx ab 2else 3fi
sets count0 to 13 with the ifx test happening before the assignment, butcount0=1 ifx ab 2else 3fi
sets count0 to 1
– David Carlisle
Apr 27 at 17:32
Thanks for this illustration. I had not realized that a numeric assignment was so 'aggressive'. I take it that this expansion would continue even farther if that expansion kept producing more numbers, that is, continue until a non-number token was encountered, right? One other issue here, the assignment in your example generates a decimal number. Is it possible to generate numbers in other bases, hexadecimal for instance?
– OneMug
2 days ago
After some reflection about howifx
expands its arguments, it seems that the statement I made in my question that ``ifx
does NOT expand its arguments'' is not strictly correct, as it must surely expand them at least once if that argument is a control sequence. Is that correct?
– OneMug
2 days ago
|
show 2 more comments
chardeftemp=thecurrentchar
edeftmptemp%
tokens defined via chardef
are not expandable, so edeftmptemp
is the same as deftmptemp
It is not clear why you do not expect ifxmysterylettertemp
not to be true if the two tokens are both defined via chardef
with the same number?
I guess your modified version was equivalent to
chardeftemp=thecurrentchar
ifxmysterylettertemp
There the ifx
test happens before the assignment while looking to end the number, you need
chardeftemp=thecurrentcharrelax
ifxmysterylettertemp
or
chardeftemp=currentchar
ifxmysterylettertemp
So your edef
was just acting like relax
terminating the chardef
assignment.
Thanks for the fast response. Still trying to figure out how to use the TeX-SE question and comment editors, please be patient. I had planned on converting this snippet into adefscanAlpha#1{...
so I coded it the way I did expecting the macro argument to be used in theifx
to be somewhat unknown at execution time, say be usingscanAlphaX
which would make the argument to theifx
different from using thechardef
as in the snippet.
– OneMug
Apr 27 at 16:58
As stated, removing theedef
and using eitherchardeftemp=thecurrentcharrelax
orchardeftemp=currentchar
works just fine. Aah, such are the mysteries ofrelax
ing. Not sure if I will ever figure out how torelax
. Thanks again for this answer.
– OneMug
Apr 27 at 17:19
3
@OneMugit'its not really therelax
just that expansion happens when looking for a number,count0=1ifx ab 2else 3fi
sets count0 to 13 with the ifx test happening before the assignment, butcount0=1 ifx ab 2else 3fi
sets count0 to 1
– David Carlisle
Apr 27 at 17:32
Thanks for this illustration. I had not realized that a numeric assignment was so 'aggressive'. I take it that this expansion would continue even farther if that expansion kept producing more numbers, that is, continue until a non-number token was encountered, right? One other issue here, the assignment in your example generates a decimal number. Is it possible to generate numbers in other bases, hexadecimal for instance?
– OneMug
2 days ago
After some reflection about howifx
expands its arguments, it seems that the statement I made in my question that ``ifx
does NOT expand its arguments'' is not strictly correct, as it must surely expand them at least once if that argument is a control sequence. Is that correct?
– OneMug
2 days ago
|
show 2 more comments
chardeftemp=thecurrentchar
edeftmptemp%
tokens defined via chardef
are not expandable, so edeftmptemp
is the same as deftmptemp
It is not clear why you do not expect ifxmysterylettertemp
not to be true if the two tokens are both defined via chardef
with the same number?
I guess your modified version was equivalent to
chardeftemp=thecurrentchar
ifxmysterylettertemp
There the ifx
test happens before the assignment while looking to end the number, you need
chardeftemp=thecurrentcharrelax
ifxmysterylettertemp
or
chardeftemp=currentchar
ifxmysterylettertemp
So your edef
was just acting like relax
terminating the chardef
assignment.
chardeftemp=thecurrentchar
edeftmptemp%
tokens defined via chardef
are not expandable, so edeftmptemp
is the same as deftmptemp
It is not clear why you do not expect ifxmysterylettertemp
not to be true if the two tokens are both defined via chardef
with the same number?
I guess your modified version was equivalent to
chardeftemp=thecurrentchar
ifxmysterylettertemp
There the ifx
test happens before the assignment while looking to end the number, you need
chardeftemp=thecurrentcharrelax
ifxmysterylettertemp
or
chardeftemp=currentchar
ifxmysterylettertemp
So your edef
was just acting like relax
terminating the chardef
assignment.
edited Apr 27 at 16:33
answered Apr 27 at 16:25
David CarlisleDavid Carlisle
502k4211491898
502k4211491898
Thanks for the fast response. Still trying to figure out how to use the TeX-SE question and comment editors, please be patient. I had planned on converting this snippet into adefscanAlpha#1{...
so I coded it the way I did expecting the macro argument to be used in theifx
to be somewhat unknown at execution time, say be usingscanAlphaX
which would make the argument to theifx
different from using thechardef
as in the snippet.
– OneMug
Apr 27 at 16:58
As stated, removing theedef
and using eitherchardeftemp=thecurrentcharrelax
orchardeftemp=currentchar
works just fine. Aah, such are the mysteries ofrelax
ing. Not sure if I will ever figure out how torelax
. Thanks again for this answer.
– OneMug
Apr 27 at 17:19
3
@OneMugit'its not really therelax
just that expansion happens when looking for a number,count0=1ifx ab 2else 3fi
sets count0 to 13 with the ifx test happening before the assignment, butcount0=1 ifx ab 2else 3fi
sets count0 to 1
– David Carlisle
Apr 27 at 17:32
Thanks for this illustration. I had not realized that a numeric assignment was so 'aggressive'. I take it that this expansion would continue even farther if that expansion kept producing more numbers, that is, continue until a non-number token was encountered, right? One other issue here, the assignment in your example generates a decimal number. Is it possible to generate numbers in other bases, hexadecimal for instance?
– OneMug
2 days ago
After some reflection about howifx
expands its arguments, it seems that the statement I made in my question that ``ifx
does NOT expand its arguments'' is not strictly correct, as it must surely expand them at least once if that argument is a control sequence. Is that correct?
– OneMug
2 days ago
|
show 2 more comments
Thanks for the fast response. Still trying to figure out how to use the TeX-SE question and comment editors, please be patient. I had planned on converting this snippet into adefscanAlpha#1{...
so I coded it the way I did expecting the macro argument to be used in theifx
to be somewhat unknown at execution time, say be usingscanAlphaX
which would make the argument to theifx
different from using thechardef
as in the snippet.
– OneMug
Apr 27 at 16:58
As stated, removing theedef
and using eitherchardeftemp=thecurrentcharrelax
orchardeftemp=currentchar
works just fine. Aah, such are the mysteries ofrelax
ing. Not sure if I will ever figure out how torelax
. Thanks again for this answer.
– OneMug
Apr 27 at 17:19
3
@OneMugit'its not really therelax
just that expansion happens when looking for a number,count0=1ifx ab 2else 3fi
sets count0 to 13 with the ifx test happening before the assignment, butcount0=1 ifx ab 2else 3fi
sets count0 to 1
– David Carlisle
Apr 27 at 17:32
Thanks for this illustration. I had not realized that a numeric assignment was so 'aggressive'. I take it that this expansion would continue even farther if that expansion kept producing more numbers, that is, continue until a non-number token was encountered, right? One other issue here, the assignment in your example generates a decimal number. Is it possible to generate numbers in other bases, hexadecimal for instance?
– OneMug
2 days ago
After some reflection about howifx
expands its arguments, it seems that the statement I made in my question that ``ifx
does NOT expand its arguments'' is not strictly correct, as it must surely expand them at least once if that argument is a control sequence. Is that correct?
– OneMug
2 days ago
Thanks for the fast response. Still trying to figure out how to use the TeX-SE question and comment editors, please be patient. I had planned on converting this snippet into a
defscanAlpha#1{...
so I coded it the way I did expecting the macro argument to be used in the ifx
to be somewhat unknown at execution time, say be using scanAlphaX
which would make the argument to the ifx
different from using the chardef
as in the snippet.– OneMug
Apr 27 at 16:58
Thanks for the fast response. Still trying to figure out how to use the TeX-SE question and comment editors, please be patient. I had planned on converting this snippet into a
defscanAlpha#1{...
so I coded it the way I did expecting the macro argument to be used in the ifx
to be somewhat unknown at execution time, say be using scanAlphaX
which would make the argument to the ifx
different from using the chardef
as in the snippet.– OneMug
Apr 27 at 16:58
As stated, removing the
edef
and using either chardeftemp=thecurrentcharrelax
or chardeftemp=currentchar
works just fine. Aah, such are the mysteries of relax
ing. Not sure if I will ever figure out how to relax
. Thanks again for this answer.– OneMug
Apr 27 at 17:19
As stated, removing the
edef
and using either chardeftemp=thecurrentcharrelax
or chardeftemp=currentchar
works just fine. Aah, such are the mysteries of relax
ing. Not sure if I will ever figure out how to relax
. Thanks again for this answer.– OneMug
Apr 27 at 17:19
3
3
@OneMugit'its not really the
relax
just that expansion happens when looking for a number, count0=1ifx ab 2else 3fi
sets count0 to 13 with the ifx test happening before the assignment, but count0=1 ifx ab 2else 3fi
sets count0 to 1– David Carlisle
Apr 27 at 17:32
@OneMugit'its not really the
relax
just that expansion happens when looking for a number, count0=1ifx ab 2else 3fi
sets count0 to 13 with the ifx test happening before the assignment, but count0=1 ifx ab 2else 3fi
sets count0 to 1– David Carlisle
Apr 27 at 17:32
Thanks for this illustration. I had not realized that a numeric assignment was so 'aggressive'. I take it that this expansion would continue even farther if that expansion kept producing more numbers, that is, continue until a non-number token was encountered, right? One other issue here, the assignment in your example generates a decimal number. Is it possible to generate numbers in other bases, hexadecimal for instance?
– OneMug
2 days ago
Thanks for this illustration. I had not realized that a numeric assignment was so 'aggressive'. I take it that this expansion would continue even farther if that expansion kept producing more numbers, that is, continue until a non-number token was encountered, right? One other issue here, the assignment in your example generates a decimal number. Is it possible to generate numbers in other bases, hexadecimal for instance?
– OneMug
2 days ago
After some reflection about how
ifx
expands its arguments, it seems that the statement I made in my question that `` ifx
does NOT expand its arguments'' is not strictly correct, as it must surely expand them at least once if that argument is a control sequence. Is that correct?– OneMug
2 days ago
After some reflection about how
ifx
expands its arguments, it seems that the statement I made in my question that `` ifx
does NOT expand its arguments'' is not strictly correct, as it must surely expand them at least once if that argument is a control sequence. Is that correct?– OneMug
2 days ago
|
show 2 more comments
OneMug is a new contributor. Be nice, and check out our Code of Conduct.
OneMug is a new contributor. Be nice, and check out our Code of Conduct.
OneMug is a new contributor. Be nice, and check out our Code of Conduct.
OneMug is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f487937%2fseemingly-unused-edef-prior-to-an-ifx-mysteriously-affects-the-outcome-of-the%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
"Lo and behold", not "low and behold"
– Hammerite
Apr 27 at 22:25
@Hammerite: Thanks, I stand corrected.
– OneMug
2 days ago
1
chardeftemp=thecurrentchar
should always bechardeftemp=currentchar
. There's no point in usingthe
(besides the desire of seeing your code break loose).– egreg
2 days ago
@egreg: Very true, but such things are not always bad things when it leads to new insight. Thanks for the comment.
– OneMug
2 days ago