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?













4















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:



enter image description here



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



enter image description here



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?










share|improve this question









New contributor




OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • "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 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















4















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:



enter image description here



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



enter image description here



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?










share|improve this question









New contributor




OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • "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 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













4












4








4


1






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:



enter image description here



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



enter image description here



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?










share|improve this question









New contributor




OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












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:



enter image description here



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



enter image description here



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






share|improve this question









New contributor




OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited 2 days ago







OneMug













New contributor




OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Apr 27 at 16:22









OneMugOneMug

236




236




New contributor




OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






OneMug is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • "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 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

















  • "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 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
















"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










1 Answer
1






active

oldest

votes


















8














 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.






share|improve this answer

























  • 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 relaxing. Not sure if I will ever figure out how to relax. Thanks again for this answer.

    – OneMug
    Apr 27 at 17:19







  • 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












  • 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











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.









draft saved

draft discarded


















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









8














 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.






share|improve this answer

























  • 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 relaxing. Not sure if I will ever figure out how to relax. Thanks again for this answer.

    – OneMug
    Apr 27 at 17:19







  • 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












  • 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















8














 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.






share|improve this answer

























  • 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 relaxing. Not sure if I will ever figure out how to relax. Thanks again for this answer.

    – OneMug
    Apr 27 at 17:19







  • 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












  • 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













8












8








8







 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.






share|improve this answer















 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.







share|improve this answer














share|improve this answer



share|improve this answer








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 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 relaxing. Not sure if I will ever figure out how to relax. Thanks again for this answer.

    – OneMug
    Apr 27 at 17:19







  • 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












  • 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

















  • 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 relaxing. Not sure if I will ever figure out how to relax. Thanks again for this answer.

    – OneMug
    Apr 27 at 17:19







  • 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












  • 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
















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 relaxing. 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 relaxing. 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










OneMug is a new contributor. Be nice, and check out our Code of Conduct.









draft saved

draft discarded


















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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Category:9 (number) SubcategoriesMedia in category "9 (number)"Navigation menuUpload mediaGND ID: 4485639-8Library of Congress authority ID: sh85091979ReasonatorScholiaStatistics

Circuit construction for execution of conditional statements using least significant bitHow are two different registers being used as “control”?How exactly is the stated composite state of the two registers being produced using the $R_zz$ controlled rotations?Efficiently performing controlled rotations in HHLWould this quantum algorithm implementation work?How to prepare a superposed states of odd integers from $1$ to $sqrtN$?Why is this implementation of the order finding algorithm not working?Circuit construction for Hamiltonian simulationHow can I invert the least significant bit of a certain term of a superposed state?Implementing an oracleImplementing a controlled sum operation

Magento 2 “No Payment Methods” in Admin New OrderHow to integrate Paypal Express Checkout with the Magento APIMagento 1.5 - Sales > Order > edit order and shipping methods disappearAuto Invoice Check/Money Order Payment methodAdd more simple payment methods?Shipping methods not showingWhat should I do to change payment methods if changing the configuration has no effects?1.9 - No Payment Methods showing upMy Payment Methods not Showing for downloadable/virtual product when checkout?Magento2 API to access internal payment methodHow to call an existing payment methods in the registration form?