global variant of csname…endcsnameWhat exactly do csname and endcsname do?global confusionWhat causes the...
Why do some academic journals requires a separate "summary" paragraph in addition to an abstract?
Chord with lyrics - What does it mean if there is an empty space instead of a Chord?
Unbiased estimator of exponential of measure of a set?
Are there categories whose internal hom is somewhat 'exotic'?
Convert HTML color to OLE
Are required indicators necessary for radio buttons?
What can I do to keep a threaded bolt from falling out of it’s slot
Can a Beast Master ranger choose a swarm as an animal companion?
Chess software to analyze games
Is there a commercial liquid with refractive index greater than n=2?
Why don't politicians push for fossil fuel reduction by pointing out their scarcity?
Are illustrations in novels frowned upon?
Earliest evidence of objects intended for future archaeologists?
!I!n!s!e!r!t! !n!b!e!t!w!e!e!n!
What happens when two creatures actually share the same turn?
How to create a summation symbol with a vertical bar?
My two team members in a remote location don't get along with each other; how can I improve working relations?
How did Apollo 15's depressurization work?
How to think about joining a company whose business I do not understand?
How to decide whether an eshop is safe or compromised
How do you call it when two celestial bodies come as close to each other as they will in their current orbits?
How to detect a failed AES256 decryption programmatically?
Does C++20 mandate source code being stored in files?
I think my coworker went through my notebook and took my project ideas
global variant of csname…endcsname
What exactly do csname and endcsname do?global confusionWhat causes the difference appearance by the useages of two “csname…endcsname”?Defining parametric commands - issue with nested csnameExpansion rules for csname/endcsname inside edefNon-alphabet letter in csname …endcsnameUse let with csnameWhat is the difference between somecmd and csname somecmdendcsname?Isn't csname fooendcsname = foo?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}
Please consider the following minimal example:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
The resulting log file contains an entry {retaining testB=macro:->blubb}
, but no corresponding entry for testA
. As far as I understand TeX, this means that csname...endcsname
defines the macro testA
as relax
locally, which I immediately after reassign globally as "blubb", which, in turn, adds an retaining-entry on my save_stack.
In my real-world application, i need to be able to define a potentially infinite number of individually named macros using csname-constructions, which now has lead to a stack overflow because of this. (well, maybe not infinite, but definitely more than 80000s…)
My question now is: Is there a way to initialize a csname…endcsname
-construct globally to avoid them being stacked on the save-stack? Or some kind of workaround which keeps my save-stack clean?
tex-core grouping csname
|
show 2 more comments
Please consider the following minimal example:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
The resulting log file contains an entry {retaining testB=macro:->blubb}
, but no corresponding entry for testA
. As far as I understand TeX, this means that csname...endcsname
defines the macro testA
as relax
locally, which I immediately after reassign globally as "blubb", which, in turn, adds an retaining-entry on my save_stack.
In my real-world application, i need to be able to define a potentially infinite number of individually named macros using csname-constructions, which now has lead to a stack overflow because of this. (well, maybe not infinite, but definitely more than 80000s…)
My question now is: Is there a way to initialize a csname…endcsname
-construct globally to avoid them being stacked on the save-stack? Or some kind of workaround which keeps my save-stack clean?
tex-core grouping csname
luatex a possibility?
– David Carlisle
Aug 16 at 16:27
why are you defining so many global variables in a local context?
– Ulrike Fischer
Aug 16 at 16:50
xmltex… in a nutshell i'm reading the information from style- and class attributes in html tables and store that information in control sequences to render them later after some calculations and processing. For each cell. Individually.... And we have books that consist only of tables… And no, luatex is not an option: too slow for professional typesetting.
– Lupino
Aug 16 at 16:56
I still don't see why this should means that you need groups. Also it sounds as if you would gain a lot by using lua to do the processing.
– Ulrike Fischer
Aug 16 at 17:12
@UlrikeFischer As I said, lua(la)tex is not an option. Unfortunately… (and neither is xelatex, pdflatex, and anything other than latex with dvi output and xmltex). Besides, everything works perfectly well within tex: calculating, processing, and rendering. It is just that the "feature" described in the OP prevents scaling: If the tables are too long, TeX bites the dust with a "memory exceeded"-error.
– Lupino
Aug 16 at 17:23
|
show 2 more comments
Please consider the following minimal example:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
The resulting log file contains an entry {retaining testB=macro:->blubb}
, but no corresponding entry for testA
. As far as I understand TeX, this means that csname...endcsname
defines the macro testA
as relax
locally, which I immediately after reassign globally as "blubb", which, in turn, adds an retaining-entry on my save_stack.
In my real-world application, i need to be able to define a potentially infinite number of individually named macros using csname-constructions, which now has lead to a stack overflow because of this. (well, maybe not infinite, but definitely more than 80000s…)
My question now is: Is there a way to initialize a csname…endcsname
-construct globally to avoid them being stacked on the save-stack? Or some kind of workaround which keeps my save-stack clean?
tex-core grouping csname
Please consider the following minimal example:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
The resulting log file contains an entry {retaining testB=macro:->blubb}
, but no corresponding entry for testA
. As far as I understand TeX, this means that csname...endcsname
defines the macro testA
as relax
locally, which I immediately after reassign globally as "blubb", which, in turn, adds an retaining-entry on my save_stack.
In my real-world application, i need to be able to define a potentially infinite number of individually named macros using csname-constructions, which now has lead to a stack overflow because of this. (well, maybe not infinite, but definitely more than 80000s…)
My question now is: Is there a way to initialize a csname…endcsname
-construct globally to avoid them being stacked on the save-stack? Or some kind of workaround which keeps my save-stack clean?
tex-core grouping csname
tex-core grouping csname
asked Aug 16 at 16:14
LupinoLupino
1,3057 silver badges12 bronze badges
1,3057 silver badges12 bronze badges
luatex a possibility?
– David Carlisle
Aug 16 at 16:27
why are you defining so many global variables in a local context?
– Ulrike Fischer
Aug 16 at 16:50
xmltex… in a nutshell i'm reading the information from style- and class attributes in html tables and store that information in control sequences to render them later after some calculations and processing. For each cell. Individually.... And we have books that consist only of tables… And no, luatex is not an option: too slow for professional typesetting.
– Lupino
Aug 16 at 16:56
I still don't see why this should means that you need groups. Also it sounds as if you would gain a lot by using lua to do the processing.
– Ulrike Fischer
Aug 16 at 17:12
@UlrikeFischer As I said, lua(la)tex is not an option. Unfortunately… (and neither is xelatex, pdflatex, and anything other than latex with dvi output and xmltex). Besides, everything works perfectly well within tex: calculating, processing, and rendering. It is just that the "feature" described in the OP prevents scaling: If the tables are too long, TeX bites the dust with a "memory exceeded"-error.
– Lupino
Aug 16 at 17:23
|
show 2 more comments
luatex a possibility?
– David Carlisle
Aug 16 at 16:27
why are you defining so many global variables in a local context?
– Ulrike Fischer
Aug 16 at 16:50
xmltex… in a nutshell i'm reading the information from style- and class attributes in html tables and store that information in control sequences to render them later after some calculations and processing. For each cell. Individually.... And we have books that consist only of tables… And no, luatex is not an option: too slow for professional typesetting.
– Lupino
Aug 16 at 16:56
I still don't see why this should means that you need groups. Also it sounds as if you would gain a lot by using lua to do the processing.
– Ulrike Fischer
Aug 16 at 17:12
@UlrikeFischer As I said, lua(la)tex is not an option. Unfortunately… (and neither is xelatex, pdflatex, and anything other than latex with dvi output and xmltex). Besides, everything works perfectly well within tex: calculating, processing, and rendering. It is just that the "feature" described in the OP prevents scaling: If the tables are too long, TeX bites the dust with a "memory exceeded"-error.
– Lupino
Aug 16 at 17:23
luatex a possibility?
– David Carlisle
Aug 16 at 16:27
luatex a possibility?
– David Carlisle
Aug 16 at 16:27
why are you defining so many global variables in a local context?
– Ulrike Fischer
Aug 16 at 16:50
why are you defining so many global variables in a local context?
– Ulrike Fischer
Aug 16 at 16:50
xmltex… in a nutshell i'm reading the information from style- and class attributes in html tables and store that information in control sequences to render them later after some calculations and processing. For each cell. Individually.... And we have books that consist only of tables… And no, luatex is not an option: too slow for professional typesetting.
– Lupino
Aug 16 at 16:56
xmltex… in a nutshell i'm reading the information from style- and class attributes in html tables and store that information in control sequences to render them later after some calculations and processing. For each cell. Individually.... And we have books that consist only of tables… And no, luatex is not an option: too slow for professional typesetting.
– Lupino
Aug 16 at 16:56
I still don't see why this should means that you need groups. Also it sounds as if you would gain a lot by using lua to do the processing.
– Ulrike Fischer
Aug 16 at 17:12
I still don't see why this should means that you need groups. Also it sounds as if you would gain a lot by using lua to do the processing.
– Ulrike Fischer
Aug 16 at 17:12
@UlrikeFischer As I said, lua(la)tex is not an option. Unfortunately… (and neither is xelatex, pdflatex, and anything other than latex with dvi output and xmltex). Besides, everything works perfectly well within tex: calculating, processing, and rendering. It is just that the "feature" described in the OP prevents scaling: If the tables are too long, TeX bites the dust with a "memory exceeded"-error.
– Lupino
Aug 16 at 17:23
@UlrikeFischer As I said, lua(la)tex is not an option. Unfortunately… (and neither is xelatex, pdflatex, and anything other than latex with dvi output and xmltex). Besides, everything works perfectly well within tex: calculating, processing, and rendering. It is just that the "feature" described in the OP prevents scaling: If the tables are too long, TeX bites the dust with a "memory exceeded"-error.
– Lupino
Aug 16 at 17:23
|
show 2 more comments
2 Answers
2
active
oldest
votes
Instead of making the csname
assignment global, you can make it even more local:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{begingroupexpandafterendgroupexpandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
Now the expandafter
is executed in a group, so the csname
defined testB
to relax
in a group which ends before gdef
starts. So testB
is undefined when the global definition occurs which should avoid the retaining entry.
I dont quite understand why this is working, but it works. Thanks.
– Lupino
Aug 16 at 17:31
Masterful! +1!!
– Steven B. Segletes
Aug 16 at 17:33
1
This is absolutely genius! This allows to have a fully-expandableifcsname
test without e-TeX usingbegingroupexpandafterendgroupexpandafterifxcsname fooendcsnameundefined
. Bounty will be offered when eligible.
– Henri Menke
2 days ago
1
@HenriMenke Heiko uses this quite a bit in his packages too, but it's not really fully expandable, it leavesbegingroupendgroup
before the test (so you can't use it at start of a table cell without preventingomit
etc)
– David Carlisle
2 days ago
add a comment |
I don't know squat about (La)TeX stacks (other than stackengine
, LOL), but if the goal is to avoid having the csname
inside a def
...
Expand the csname
before executing the outer def
.
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
good trick, but I expect that's cheating, as the OP would probably need 80000 top level instances of that in the stated use case. (+1anyway:-)
– David Carlisle
Aug 16 at 16:27
Gaining that extra-level of depth (height?), actually helps for most of my cases, but not for all :/ Am I assuming correctly that i would need one level ofexpandafter
for each "layer" of embeded macro? That woudl be bad, because foo could itself be embedded in another macro, or not. And since I'm using (forced to use) xmltex, i probably never will reach "real" top-level with that method… Thanks anyways for the quick reply.
– Lupino
Aug 16 at 16:51
@Lupino As I said, I don't profess to understand what is under TeX's hood, such as stacks. However, if thecsname
is the issue, you would not need additional layers ofexpandafter
...only on the layer employing thecsname
. If, on the other hand, the issue is one ofdef
vs.gdef
, then I am not sure. But if David thinks I am cheating, I probably am.
– Steven B. Segletes
Aug 16 at 17:03
@Lupino The key would be if you can think of a problem case that uses nocsname
s...
– Steven B. Segletes
Aug 16 at 17:05
1
@StevenB.Segletes If i usedefbaz{expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}}
and later{bazfoo}
i would need to extend theexpandafter
s outwards todefbaz
to raise the csname to the same level as my call totestB
, otherwise i have the same problem as before…
– Lupino
Aug 16 at 17:16
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/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
});
}
});
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%2f504501%2fglobal-variant-of-csname-endcsname%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Instead of making the csname
assignment global, you can make it even more local:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{begingroupexpandafterendgroupexpandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
Now the expandafter
is executed in a group, so the csname
defined testB
to relax
in a group which ends before gdef
starts. So testB
is undefined when the global definition occurs which should avoid the retaining entry.
I dont quite understand why this is working, but it works. Thanks.
– Lupino
Aug 16 at 17:31
Masterful! +1!!
– Steven B. Segletes
Aug 16 at 17:33
1
This is absolutely genius! This allows to have a fully-expandableifcsname
test without e-TeX usingbegingroupexpandafterendgroupexpandafterifxcsname fooendcsnameundefined
. Bounty will be offered when eligible.
– Henri Menke
2 days ago
1
@HenriMenke Heiko uses this quite a bit in his packages too, but it's not really fully expandable, it leavesbegingroupendgroup
before the test (so you can't use it at start of a table cell without preventingomit
etc)
– David Carlisle
2 days ago
add a comment |
Instead of making the csname
assignment global, you can make it even more local:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{begingroupexpandafterendgroupexpandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
Now the expandafter
is executed in a group, so the csname
defined testB
to relax
in a group which ends before gdef
starts. So testB
is undefined when the global definition occurs which should avoid the retaining entry.
I dont quite understand why this is working, but it works. Thanks.
– Lupino
Aug 16 at 17:31
Masterful! +1!!
– Steven B. Segletes
Aug 16 at 17:33
1
This is absolutely genius! This allows to have a fully-expandableifcsname
test without e-TeX usingbegingroupexpandafterendgroupexpandafterifxcsname fooendcsnameundefined
. Bounty will be offered when eligible.
– Henri Menke
2 days ago
1
@HenriMenke Heiko uses this quite a bit in his packages too, but it's not really fully expandable, it leavesbegingroupendgroup
before the test (so you can't use it at start of a table cell without preventingomit
etc)
– David Carlisle
2 days ago
add a comment |
Instead of making the csname
assignment global, you can make it even more local:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{begingroupexpandafterendgroupexpandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
Now the expandafter
is executed in a group, so the csname
defined testB
to relax
in a group which ends before gdef
starts. So testB
is undefined when the global definition occurs which should avoid the retaining entry.
Instead of making the csname
assignment global, you can make it even more local:
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
deffoobar{begingroupexpandafterendgroupexpandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
Now the expandafter
is executed in a group, so the csname
defined testB
to relax
in a group which ends before gdef
starts. So testB
is undefined when the global definition occurs which should avoid the retaining entry.
answered Aug 16 at 17:12
Marcel KrügerMarcel Krüger
15.3k1 gold badge18 silver badges38 bronze badges
15.3k1 gold badge18 silver badges38 bronze badges
I dont quite understand why this is working, but it works. Thanks.
– Lupino
Aug 16 at 17:31
Masterful! +1!!
– Steven B. Segletes
Aug 16 at 17:33
1
This is absolutely genius! This allows to have a fully-expandableifcsname
test without e-TeX usingbegingroupexpandafterendgroupexpandafterifxcsname fooendcsnameundefined
. Bounty will be offered when eligible.
– Henri Menke
2 days ago
1
@HenriMenke Heiko uses this quite a bit in his packages too, but it's not really fully expandable, it leavesbegingroupendgroup
before the test (so you can't use it at start of a table cell without preventingomit
etc)
– David Carlisle
2 days ago
add a comment |
I dont quite understand why this is working, but it works. Thanks.
– Lupino
Aug 16 at 17:31
Masterful! +1!!
– Steven B. Segletes
Aug 16 at 17:33
1
This is absolutely genius! This allows to have a fully-expandableifcsname
test without e-TeX usingbegingroupexpandafterendgroupexpandafterifxcsname fooendcsnameundefined
. Bounty will be offered when eligible.
– Henri Menke
2 days ago
1
@HenriMenke Heiko uses this quite a bit in his packages too, but it's not really fully expandable, it leavesbegingroupendgroup
before the test (so you can't use it at start of a table cell without preventingomit
etc)
– David Carlisle
2 days ago
I dont quite understand why this is working, but it works. Thanks.
– Lupino
Aug 16 at 17:31
I dont quite understand why this is working, but it works. Thanks.
– Lupino
Aug 16 at 17:31
Masterful! +1!!
– Steven B. Segletes
Aug 16 at 17:33
Masterful! +1!!
– Steven B. Segletes
Aug 16 at 17:33
1
1
This is absolutely genius! This allows to have a fully-expandable
ifcsname
test without e-TeX using begingroupexpandafterendgroupexpandafterifxcsname fooendcsnameundefined
. Bounty will be offered when eligible.– Henri Menke
2 days ago
This is absolutely genius! This allows to have a fully-expandable
ifcsname
test without e-TeX using begingroupexpandafterendgroupexpandafterifxcsname fooendcsnameundefined
. Bounty will be offered when eligible.– Henri Menke
2 days ago
1
1
@HenriMenke Heiko uses this quite a bit in his packages too, but it's not really fully expandable, it leaves
begingroupendgroup
before the test (so you can't use it at start of a table cell without preventing omit
etc)– David Carlisle
2 days ago
@HenriMenke Heiko uses this quite a bit in his packages too, but it's not really fully expandable, it leaves
begingroupendgroup
before the test (so you can't use it at start of a table cell without preventing omit
etc)– David Carlisle
2 days ago
add a comment |
I don't know squat about (La)TeX stacks (other than stackengine
, LOL), but if the goal is to avoid having the csname
inside a def
...
Expand the csname
before executing the outer def
.
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
good trick, but I expect that's cheating, as the OP would probably need 80000 top level instances of that in the stated use case. (+1anyway:-)
– David Carlisle
Aug 16 at 16:27
Gaining that extra-level of depth (height?), actually helps for most of my cases, but not for all :/ Am I assuming correctly that i would need one level ofexpandafter
for each "layer" of embeded macro? That woudl be bad, because foo could itself be embedded in another macro, or not. And since I'm using (forced to use) xmltex, i probably never will reach "real" top-level with that method… Thanks anyways for the quick reply.
– Lupino
Aug 16 at 16:51
@Lupino As I said, I don't profess to understand what is under TeX's hood, such as stacks. However, if thecsname
is the issue, you would not need additional layers ofexpandafter
...only on the layer employing thecsname
. If, on the other hand, the issue is one ofdef
vs.gdef
, then I am not sure. But if David thinks I am cheating, I probably am.
– Steven B. Segletes
Aug 16 at 17:03
@Lupino The key would be if you can think of a problem case that uses nocsname
s...
– Steven B. Segletes
Aug 16 at 17:05
1
@StevenB.Segletes If i usedefbaz{expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}}
and later{bazfoo}
i would need to extend theexpandafter
s outwards todefbaz
to raise the csname to the same level as my call totestB
, otherwise i have the same problem as before…
– Lupino
Aug 16 at 17:16
add a comment |
I don't know squat about (La)TeX stacks (other than stackengine
, LOL), but if the goal is to avoid having the csname
inside a def
...
Expand the csname
before executing the outer def
.
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
good trick, but I expect that's cheating, as the OP would probably need 80000 top level instances of that in the stated use case. (+1anyway:-)
– David Carlisle
Aug 16 at 16:27
Gaining that extra-level of depth (height?), actually helps for most of my cases, but not for all :/ Am I assuming correctly that i would need one level ofexpandafter
for each "layer" of embeded macro? That woudl be bad, because foo could itself be embedded in another macro, or not. And since I'm using (forced to use) xmltex, i probably never will reach "real" top-level with that method… Thanks anyways for the quick reply.
– Lupino
Aug 16 at 16:51
@Lupino As I said, I don't profess to understand what is under TeX's hood, such as stacks. However, if thecsname
is the issue, you would not need additional layers ofexpandafter
...only on the layer employing thecsname
. If, on the other hand, the issue is one ofdef
vs.gdef
, then I am not sure. But if David thinks I am cheating, I probably am.
– Steven B. Segletes
Aug 16 at 17:03
@Lupino The key would be if you can think of a problem case that uses nocsname
s...
– Steven B. Segletes
Aug 16 at 17:05
1
@StevenB.Segletes If i usedefbaz{expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}}
and later{bazfoo}
i would need to extend theexpandafter
s outwards todefbaz
to raise the csname to the same level as my call totestB
, otherwise i have the same problem as before…
– Lupino
Aug 16 at 17:16
add a comment |
I don't know squat about (La)TeX stacks (other than stackengine
, LOL), but if the goal is to avoid having the csname
inside a def
...
Expand the csname
before executing the outer def
.
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
I don't know squat about (La)TeX stacks (other than stackengine
, LOL), but if the goal is to avoid having the csname
inside a def
...
Expand the csname
before executing the outer def
.
documentclass{article}
tracingrestores=1
deffoo{barfoobar}
defbar{gdeftestA{blabb}}
expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}
begin{document}
{foo}
testA
testB
end{document}
answered Aug 16 at 16:22
Steven B. SegletesSteven B. Segletes
168k9 gold badges214 silver badges436 bronze badges
168k9 gold badges214 silver badges436 bronze badges
good trick, but I expect that's cheating, as the OP would probably need 80000 top level instances of that in the stated use case. (+1anyway:-)
– David Carlisle
Aug 16 at 16:27
Gaining that extra-level of depth (height?), actually helps for most of my cases, but not for all :/ Am I assuming correctly that i would need one level ofexpandafter
for each "layer" of embeded macro? That woudl be bad, because foo could itself be embedded in another macro, or not. And since I'm using (forced to use) xmltex, i probably never will reach "real" top-level with that method… Thanks anyways for the quick reply.
– Lupino
Aug 16 at 16:51
@Lupino As I said, I don't profess to understand what is under TeX's hood, such as stacks. However, if thecsname
is the issue, you would not need additional layers ofexpandafter
...only on the layer employing thecsname
. If, on the other hand, the issue is one ofdef
vs.gdef
, then I am not sure. But if David thinks I am cheating, I probably am.
– Steven B. Segletes
Aug 16 at 17:03
@Lupino The key would be if you can think of a problem case that uses nocsname
s...
– Steven B. Segletes
Aug 16 at 17:05
1
@StevenB.Segletes If i usedefbaz{expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}}
and later{bazfoo}
i would need to extend theexpandafter
s outwards todefbaz
to raise the csname to the same level as my call totestB
, otherwise i have the same problem as before…
– Lupino
Aug 16 at 17:16
add a comment |
good trick, but I expect that's cheating, as the OP would probably need 80000 top level instances of that in the stated use case. (+1anyway:-)
– David Carlisle
Aug 16 at 16:27
Gaining that extra-level of depth (height?), actually helps for most of my cases, but not for all :/ Am I assuming correctly that i would need one level ofexpandafter
for each "layer" of embeded macro? That woudl be bad, because foo could itself be embedded in another macro, or not. And since I'm using (forced to use) xmltex, i probably never will reach "real" top-level with that method… Thanks anyways for the quick reply.
– Lupino
Aug 16 at 16:51
@Lupino As I said, I don't profess to understand what is under TeX's hood, such as stacks. However, if thecsname
is the issue, you would not need additional layers ofexpandafter
...only on the layer employing thecsname
. If, on the other hand, the issue is one ofdef
vs.gdef
, then I am not sure. But if David thinks I am cheating, I probably am.
– Steven B. Segletes
Aug 16 at 17:03
@Lupino The key would be if you can think of a problem case that uses nocsname
s...
– Steven B. Segletes
Aug 16 at 17:05
1
@StevenB.Segletes If i usedefbaz{expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}}
and later{bazfoo}
i would need to extend theexpandafter
s outwards todefbaz
to raise the csname to the same level as my call totestB
, otherwise i have the same problem as before…
– Lupino
Aug 16 at 17:16
good trick, but I expect that's cheating, as the OP would probably need 80000 top level instances of that in the stated use case. (+1anyway:-)
– David Carlisle
Aug 16 at 16:27
good trick, but I expect that's cheating, as the OP would probably need 80000 top level instances of that in the stated use case. (+1anyway:-)
– David Carlisle
Aug 16 at 16:27
Gaining that extra-level of depth (height?), actually helps for most of my cases, but not for all :/ Am I assuming correctly that i would need one level of
expandafter
for each "layer" of embeded macro? That woudl be bad, because foo could itself be embedded in another macro, or not. And since I'm using (forced to use) xmltex, i probably never will reach "real" top-level with that method… Thanks anyways for the quick reply.– Lupino
Aug 16 at 16:51
Gaining that extra-level of depth (height?), actually helps for most of my cases, but not for all :/ Am I assuming correctly that i would need one level of
expandafter
for each "layer" of embeded macro? That woudl be bad, because foo could itself be embedded in another macro, or not. And since I'm using (forced to use) xmltex, i probably never will reach "real" top-level with that method… Thanks anyways for the quick reply.– Lupino
Aug 16 at 16:51
@Lupino As I said, I don't profess to understand what is under TeX's hood, such as stacks. However, if the
csname
is the issue, you would not need additional layers of expandafter
...only on the layer employing the csname
. If, on the other hand, the issue is one of def
vs. gdef
, then I am not sure. But if David thinks I am cheating, I probably am.– Steven B. Segletes
Aug 16 at 17:03
@Lupino As I said, I don't profess to understand what is under TeX's hood, such as stacks. However, if the
csname
is the issue, you would not need additional layers of expandafter
...only on the layer employing the csname
. If, on the other hand, the issue is one of def
vs. gdef
, then I am not sure. But if David thinks I am cheating, I probably am.– Steven B. Segletes
Aug 16 at 17:03
@Lupino The key would be if you can think of a problem case that uses no
csname
s...– Steven B. Segletes
Aug 16 at 17:05
@Lupino The key would be if you can think of a problem case that uses no
csname
s...– Steven B. Segletes
Aug 16 at 17:05
1
1
@StevenB.Segletes If i use
defbaz{expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}}
and later {bazfoo}
i would need to extend the expandafter
s outwards to defbaz
to raise the csname to the same level as my call to testB
, otherwise i have the same problem as before…– Lupino
Aug 16 at 17:16
@StevenB.Segletes If i use
defbaz{expandafterdefexpandafterfoobarexpandafter{expandaftergdefcsname testBendcsname{blubb}}}
and later {bazfoo}
i would need to extend the expandafter
s outwards to defbaz
to raise the csname to the same level as my call to testB
, otherwise i have the same problem as before…– Lupino
Aug 16 at 17:16
add a comment |
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%2f504501%2fglobal-variant-of-csname-endcsname%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
luatex a possibility?
– David Carlisle
Aug 16 at 16:27
why are you defining so many global variables in a local context?
– Ulrike Fischer
Aug 16 at 16:50
xmltex… in a nutshell i'm reading the information from style- and class attributes in html tables and store that information in control sequences to render them later after some calculations and processing. For each cell. Individually.... And we have books that consist only of tables… And no, luatex is not an option: too slow for professional typesetting.
– Lupino
Aug 16 at 16:56
I still don't see why this should means that you need groups. Also it sounds as if you would gain a lot by using lua to do the processing.
– Ulrike Fischer
Aug 16 at 17:12
@UlrikeFischer As I said, lua(la)tex is not an option. Unfortunately… (and neither is xelatex, pdflatex, and anything other than latex with dvi output and xmltex). Besides, everything works perfectly well within tex: calculating, processing, and rendering. It is just that the "feature" described in the OP prevents scaling: If the tables are too long, TeX bites the dust with a "memory exceeded"-error.
– Lupino
Aug 16 at 17:23