How can I use expandafter the expand the definition of this control sequence?TikZ: pgfutil-common: pgfutil@in@ - how does it work?Why does expandafter not expand the full group?Why does this use of `expandafter` not work?How to get LaTeX to expand at the correct position?How to expand control sequence in argument of a macroUndefined control sequence at definitionDefine macro for sequence/list/tuple macrosexpandafter theeverypar - undefined control sequenceProtecting blocks of text and commands, not just one command, from expansionWhat is “# Notation”? How does the # syntax work?

A Mainer Expression

Does a large scratch in an ND filter affect image quality?

What 68-pin connector is this on my 2.5" solid state drive?

Building Truncatable Primes using Nest(List), While, Fold

In what state are satellites left in when they are left in a graveyard orbit?

Block diagram vs flow chart?

Can derivatives be defined as anti-integrals?

What does "boys rule, girls drool" mean?

What is a "major country" as named in Bernie Sanders' Healthcare debate answers?

Test to know when to use GLM over Linear Regression?

Output a Super Mario Image

Ambiguity in notation resolved by +

Would it be unbalanced to increase a druid's number of uses of Wild Shape based on level?

How to control the output voltage of a solid state relay

Impossible Scrabble Words

How does a simple logistic regression model achieve a 92% classification accuracy on MNIST?

What is the meaning of 「ぞんぞん」?

Why is it called a stateful and a stateless firewall?

Unable to find solution to 6 simultaneous equations

How to publish superseding results without creating enemies

Meaning of Swimming their horses

What's the benefit of prohibiting the use of techniques/language constructs that have not been taught?

Seven Places at Once - Another Google Earth Challenge?

Why don't Wizards use wrist straps to protect against disarming charms?



How can I use expandafter the expand the definition of this control sequence?


TikZ: pgfutil-common: pgfutil@in@ - how does it work?Why does expandafter not expand the full group?Why does this use of `expandafter` not work?How to get LaTeX to expand at the correct position?How to expand control sequence in argument of a macroUndefined control sequence at definitionDefine macro for sequence/list/tuple macrosexpandafter theeverypar - undefined control sequenceProtecting blocks of text and commands, not just one command, from expansionWhat is “# Notation”? How does the # syntax work?






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








4















I define a command test that does nothing but define a control sequence c[count], where [count] is the current text value of the counter count at the time test is executed. I want c[count] to output the text "Number thecount", where thecount should be the value of count at time of execution.



documentclass[12pt]article

newcountercount

newcommandtestexpandafterdefcsname cthecountendcsnameNumber thecount~

begindocument

setcountercount1
test
setcountercount2
test
setcountercount3
test

csname c1endcsname
csname c2endcsname
csname c3endcsname

enddocument


This outputs: "Number 3 Number 3 Number 3". I believe this means that thecount in the output of test was not expanded during each test.



How can I fix this to display "Number 1 Number 2 Number 3" as intended? I'm unsure how to use expandafter for this, my attempts keep breaking everything. I relatively new to this sort of LaTeX, so I'd appreciate any help on this matter.










share|improve this question









New contributor



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
















  • 3





    Replace the def by edef. You want the thecount to be expanded at the time it's defined, otherwise thecount will take the value of the counter at the time it's used

    – Phelype Oleinik
    9 hours ago











  • @PhelypeOleinik Thank you!

    – greenturtle3141
    9 hours ago

















4















I define a command test that does nothing but define a control sequence c[count], where [count] is the current text value of the counter count at the time test is executed. I want c[count] to output the text "Number thecount", where thecount should be the value of count at time of execution.



documentclass[12pt]article

newcountercount

newcommandtestexpandafterdefcsname cthecountendcsnameNumber thecount~

begindocument

setcountercount1
test
setcountercount2
test
setcountercount3
test

csname c1endcsname
csname c2endcsname
csname c3endcsname

enddocument


This outputs: "Number 3 Number 3 Number 3". I believe this means that thecount in the output of test was not expanded during each test.



How can I fix this to display "Number 1 Number 2 Number 3" as intended? I'm unsure how to use expandafter for this, my attempts keep breaking everything. I relatively new to this sort of LaTeX, so I'd appreciate any help on this matter.










share|improve this question









New contributor



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
















  • 3





    Replace the def by edef. You want the thecount to be expanded at the time it's defined, otherwise thecount will take the value of the counter at the time it's used

    – Phelype Oleinik
    9 hours ago











  • @PhelypeOleinik Thank you!

    – greenturtle3141
    9 hours ago













4












4








4








I define a command test that does nothing but define a control sequence c[count], where [count] is the current text value of the counter count at the time test is executed. I want c[count] to output the text "Number thecount", where thecount should be the value of count at time of execution.



documentclass[12pt]article

newcountercount

newcommandtestexpandafterdefcsname cthecountendcsnameNumber thecount~

begindocument

setcountercount1
test
setcountercount2
test
setcountercount3
test

csname c1endcsname
csname c2endcsname
csname c3endcsname

enddocument


This outputs: "Number 3 Number 3 Number 3". I believe this means that thecount in the output of test was not expanded during each test.



How can I fix this to display "Number 1 Number 2 Number 3" as intended? I'm unsure how to use expandafter for this, my attempts keep breaking everything. I relatively new to this sort of LaTeX, so I'd appreciate any help on this matter.










share|improve this question









New contributor



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











I define a command test that does nothing but define a control sequence c[count], where [count] is the current text value of the counter count at the time test is executed. I want c[count] to output the text "Number thecount", where thecount should be the value of count at time of execution.



documentclass[12pt]article

newcountercount

newcommandtestexpandafterdefcsname cthecountendcsnameNumber thecount~

begindocument

setcountercount1
test
setcountercount2
test
setcountercount3
test

csname c1endcsname
csname c2endcsname
csname c3endcsname

enddocument


This outputs: "Number 3 Number 3 Number 3". I believe this means that thecount in the output of test was not expanded during each test.



How can I fix this to display "Number 1 Number 2 Number 3" as intended? I'm unsure how to use expandafter for this, my attempts keep breaking everything. I relatively new to this sort of LaTeX, so I'd appreciate any help on this matter.







macros expansion






share|improve this question









New contributor



greenturtle3141 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



greenturtle3141 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 4 hours ago









siracusa

8,8382 gold badges18 silver badges39 bronze badges




8,8382 gold badges18 silver badges39 bronze badges






New contributor



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








asked 9 hours ago









greenturtle3141greenturtle3141

1234 bronze badges




1234 bronze badges




New contributor



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




New contributor




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












  • 3





    Replace the def by edef. You want the thecount to be expanded at the time it's defined, otherwise thecount will take the value of the counter at the time it's used

    – Phelype Oleinik
    9 hours ago











  • @PhelypeOleinik Thank you!

    – greenturtle3141
    9 hours ago












  • 3





    Replace the def by edef. You want the thecount to be expanded at the time it's defined, otherwise thecount will take the value of the counter at the time it's used

    – Phelype Oleinik
    9 hours ago











  • @PhelypeOleinik Thank you!

    – greenturtle3141
    9 hours ago







3




3





Replace the def by edef. You want the thecount to be expanded at the time it's defined, otherwise thecount will take the value of the counter at the time it's used

– Phelype Oleinik
9 hours ago





Replace the def by edef. You want the thecount to be expanded at the time it's defined, otherwise thecount will take the value of the counter at the time it's used

– Phelype Oleinik
9 hours ago













@PhelypeOleinik Thank you!

– greenturtle3141
9 hours ago





@PhelypeOleinik Thank you!

– greenturtle3141
9 hours ago










1 Answer
1






active

oldest

votes


















5
















Let's see what happens.



  1. The replacement text of a macro is absorbed with no interpretation or macro expansion during def, except for the fact that explicit braces must be balanced, which is necessary for determining where the replacement text ends.


  2. When csname is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matching endcsname.


So, if you do deffooNumber thecount, the replacement text will contain thecount which will be expanded after the expansion of foo upon usage. What's the macro name is completely irrelevant.



To the contrary, if the value of count is 1, expandafterdefcsname foothecountendcsnamewhatever will define the macro with name “foo1” (that cannot be accessed unless using csname or changing the category code of 1).



Note that a single expansion step on thecount will not produce 1, but just



@arabicc@count


because LaTeX by default will do defthecount@arabicc@count, so a single expandafter would not be sufficient: three expansion steps are necessary, because @arabic is defined as



> @arabic=macro:
#1->number #1.


and so another step is necessary to get the value in Arabic numerals.



However, @arabic is fully expandable, so you can use edef:



newcommandtestexpandafteredefcsname cthecountendcsnameNumber thecount~


because edef is the same as def, but the replacement text consists of the full expansion of the <balanced text> in the body of the definition.



Also



newcommandtest%
expandafterdefcsname cthecountexpandafterendcsnameexpandafter%
expandedNumber thecount~%
%



would work, because the trailing expandafter in csname is expanded, triggering the expansion of expandafter before {, which triggers the expansion of expanded. Of course edef is much simpler, but expanded can be useful in other cases.



Be careful with edef or expanded, because “dangerous” tokens might need noexpand.






share|improve this answer



























  • Thank you! This was very informative.

    – greenturtle3141
    47 mins 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/4.0/"u003ecc by-sa 4.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
);



);







greenturtle3141 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%2f508286%2fhow-can-i-use-expandafter-the-expand-the-definition-of-this-control-sequence%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









5
















Let's see what happens.



  1. The replacement text of a macro is absorbed with no interpretation or macro expansion during def, except for the fact that explicit braces must be balanced, which is necessary for determining where the replacement text ends.


  2. When csname is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matching endcsname.


So, if you do deffooNumber thecount, the replacement text will contain thecount which will be expanded after the expansion of foo upon usage. What's the macro name is completely irrelevant.



To the contrary, if the value of count is 1, expandafterdefcsname foothecountendcsnamewhatever will define the macro with name “foo1” (that cannot be accessed unless using csname or changing the category code of 1).



Note that a single expansion step on thecount will not produce 1, but just



@arabicc@count


because LaTeX by default will do defthecount@arabicc@count, so a single expandafter would not be sufficient: three expansion steps are necessary, because @arabic is defined as



> @arabic=macro:
#1->number #1.


and so another step is necessary to get the value in Arabic numerals.



However, @arabic is fully expandable, so you can use edef:



newcommandtestexpandafteredefcsname cthecountendcsnameNumber thecount~


because edef is the same as def, but the replacement text consists of the full expansion of the <balanced text> in the body of the definition.



Also



newcommandtest%
expandafterdefcsname cthecountexpandafterendcsnameexpandafter%
expandedNumber thecount~%
%



would work, because the trailing expandafter in csname is expanded, triggering the expansion of expandafter before {, which triggers the expansion of expanded. Of course edef is much simpler, but expanded can be useful in other cases.



Be careful with edef or expanded, because “dangerous” tokens might need noexpand.






share|improve this answer



























  • Thank you! This was very informative.

    – greenturtle3141
    47 mins ago















5
















Let's see what happens.



  1. The replacement text of a macro is absorbed with no interpretation or macro expansion during def, except for the fact that explicit braces must be balanced, which is necessary for determining where the replacement text ends.


  2. When csname is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matching endcsname.


So, if you do deffooNumber thecount, the replacement text will contain thecount which will be expanded after the expansion of foo upon usage. What's the macro name is completely irrelevant.



To the contrary, if the value of count is 1, expandafterdefcsname foothecountendcsnamewhatever will define the macro with name “foo1” (that cannot be accessed unless using csname or changing the category code of 1).



Note that a single expansion step on thecount will not produce 1, but just



@arabicc@count


because LaTeX by default will do defthecount@arabicc@count, so a single expandafter would not be sufficient: three expansion steps are necessary, because @arabic is defined as



> @arabic=macro:
#1->number #1.


and so another step is necessary to get the value in Arabic numerals.



However, @arabic is fully expandable, so you can use edef:



newcommandtestexpandafteredefcsname cthecountendcsnameNumber thecount~


because edef is the same as def, but the replacement text consists of the full expansion of the <balanced text> in the body of the definition.



Also



newcommandtest%
expandafterdefcsname cthecountexpandafterendcsnameexpandafter%
expandedNumber thecount~%
%



would work, because the trailing expandafter in csname is expanded, triggering the expansion of expandafter before {, which triggers the expansion of expanded. Of course edef is much simpler, but expanded can be useful in other cases.



Be careful with edef or expanded, because “dangerous” tokens might need noexpand.






share|improve this answer



























  • Thank you! This was very informative.

    – greenturtle3141
    47 mins ago













5














5










5









Let's see what happens.



  1. The replacement text of a macro is absorbed with no interpretation or macro expansion during def, except for the fact that explicit braces must be balanced, which is necessary for determining where the replacement text ends.


  2. When csname is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matching endcsname.


So, if you do deffooNumber thecount, the replacement text will contain thecount which will be expanded after the expansion of foo upon usage. What's the macro name is completely irrelevant.



To the contrary, if the value of count is 1, expandafterdefcsname foothecountendcsnamewhatever will define the macro with name “foo1” (that cannot be accessed unless using csname or changing the category code of 1).



Note that a single expansion step on thecount will not produce 1, but just



@arabicc@count


because LaTeX by default will do defthecount@arabicc@count, so a single expandafter would not be sufficient: three expansion steps are necessary, because @arabic is defined as



> @arabic=macro:
#1->number #1.


and so another step is necessary to get the value in Arabic numerals.



However, @arabic is fully expandable, so you can use edef:



newcommandtestexpandafteredefcsname cthecountendcsnameNumber thecount~


because edef is the same as def, but the replacement text consists of the full expansion of the <balanced text> in the body of the definition.



Also



newcommandtest%
expandafterdefcsname cthecountexpandafterendcsnameexpandafter%
expandedNumber thecount~%
%



would work, because the trailing expandafter in csname is expanded, triggering the expansion of expandafter before {, which triggers the expansion of expanded. Of course edef is much simpler, but expanded can be useful in other cases.



Be careful with edef or expanded, because “dangerous” tokens might need noexpand.






share|improve this answer















Let's see what happens.



  1. The replacement text of a macro is absorbed with no interpretation or macro expansion during def, except for the fact that explicit braces must be balanced, which is necessary for determining where the replacement text ends.


  2. When csname is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matching endcsname.


So, if you do deffooNumber thecount, the replacement text will contain thecount which will be expanded after the expansion of foo upon usage. What's the macro name is completely irrelevant.



To the contrary, if the value of count is 1, expandafterdefcsname foothecountendcsnamewhatever will define the macro with name “foo1” (that cannot be accessed unless using csname or changing the category code of 1).



Note that a single expansion step on thecount will not produce 1, but just



@arabicc@count


because LaTeX by default will do defthecount@arabicc@count, so a single expandafter would not be sufficient: three expansion steps are necessary, because @arabic is defined as



> @arabic=macro:
#1->number #1.


and so another step is necessary to get the value in Arabic numerals.



However, @arabic is fully expandable, so you can use edef:



newcommandtestexpandafteredefcsname cthecountendcsnameNumber thecount~


because edef is the same as def, but the replacement text consists of the full expansion of the <balanced text> in the body of the definition.



Also



newcommandtest%
expandafterdefcsname cthecountexpandafterendcsnameexpandafter%
expandedNumber thecount~%
%



would work, because the trailing expandafter in csname is expanded, triggering the expansion of expandafter before {, which triggers the expansion of expanded. Of course edef is much simpler, but expanded can be useful in other cases.



Be careful with edef or expanded, because “dangerous” tokens might need noexpand.







share|improve this answer














share|improve this answer



share|improve this answer








edited 7 hours ago

























answered 7 hours ago









egregegreg

769k91 gold badges2006 silver badges3362 bronze badges




769k91 gold badges2006 silver badges3362 bronze badges















  • Thank you! This was very informative.

    – greenturtle3141
    47 mins ago

















  • Thank you! This was very informative.

    – greenturtle3141
    47 mins ago
















Thank you! This was very informative.

– greenturtle3141
47 mins ago





Thank you! This was very informative.

– greenturtle3141
47 mins ago











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









draft saved

draft discarded

















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












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











greenturtle3141 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%2f508286%2fhow-can-i-use-expandafter-the-expand-the-definition-of-this-control-sequence%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

Invision Community Contents History See also References External links Navigation menuProprietaryinvisioncommunity.comIPS Community ForumsIPS Community Forumsthis blog entry"License Changes, IP.Board 3.4, and the Future""Interview -- Matt Mecham of Ibforums""CEO Invision Power Board, Matt Mecham Is a Liar, Thief!"IPB License Explanation 1.3, 1.3.1, 2.0, and 2.1ArchivedSecurity Fixes, Updates And Enhancements For IPB 1.3.1Archived"New Demo Accounts - Invision Power Services"the original"New Default Skin"the original"Invision Power Board 3.0.0 and Applications Released"the original"Archived copy"the original"Perpetual licenses being done away with""Release Notes - Invision Power Services""Introducing: IPS Community Suite 4!"Invision Community Release Notes

Canceling a color specificationRandomly assigning color to Graphics3D objects?Default color for Filling in Mathematica 9Coloring specific elements of sets with a prime modified order in an array plotHow to pick a color differing significantly from the colors already in a given color list?Detection of the text colorColor numbers based on their valueCan color schemes for use with ColorData include opacity specification?My dynamic color schemes

Ласкавець круглолистий Зміст Опис | Поширення | Галерея | Примітки | Посилання | Навігаційне меню58171138361-22960890446Bupleurum rotundifoliumEuro+Med PlantbasePlants of the World Online — Kew ScienceGermplasm Resources Information Network (GRIN)Ласкавецькн. VI : Літери Ком — Левиправивши або дописавши її