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;
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
New contributor
add a comment
|
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
New contributor
3
Replace thedef
byedef
. You want thethecount
to be expanded at the time it's defined, otherwisethecount
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
add a comment
|
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
New contributor
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
macros expansion
New contributor
New contributor
edited 4 hours ago
siracusa
8,8382 gold badges18 silver badges39 bronze badges
8,8382 gold badges18 silver badges39 bronze badges
New contributor
asked 9 hours ago
greenturtle3141greenturtle3141
1234 bronze badges
1234 bronze badges
New contributor
New contributor
3
Replace thedef
byedef
. You want thethecount
to be expanded at the time it's defined, otherwisethecount
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
add a comment
|
3
Replace thedef
byedef
. You want thethecount
to be expanded at the time it's defined, otherwisethecount
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
add a comment
|
1 Answer
1
active
oldest
votes
Let's see what happens.
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.When
csname
is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matchingendcsname
.
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
.
Thank you! This was very informative.
– greenturtle3141
47 mins ago
add a comment
|
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.
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%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
Let's see what happens.
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.When
csname
is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matchingendcsname
.
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
.
Thank you! This was very informative.
– greenturtle3141
47 mins ago
add a comment
|
Let's see what happens.
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.When
csname
is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matchingendcsname
.
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
.
Thank you! This was very informative.
– greenturtle3141
47 mins ago
add a comment
|
Let's see what happens.
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.When
csname
is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matchingendcsname
.
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
.
Let's see what happens.
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.When
csname
is being expanded, tokens are fully expanded until only unexpandable tokens remain, up to the matchingendcsname
.
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
.
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
add a comment
|
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
add a comment
|
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.
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.
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%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
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
3
Replace the
def
byedef
. You want thethecount
to be expanded at the time it's defined, otherwisethecount
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