LaTeX: Why are digits allowed in environments, but forbidden in commands?What exactly do csname and endcsname do?Why are some characters not allowed in command sequencesWhy does LaTeX make a distinction between commands and environments?Do all starred commands have anything in common?Why are some characters not allowed in command sequencesSuggestions for an automatic taxonomy environmentUse a character other than the backslash for commandsWhy are LaTeX macros so inconsistent?Are end… macro names reserved in LaTeX2e?Can't use command with square brackets in matrix environmentHow to control conditional statements within new commands and environmentsCreating Commands which Make New Environments
dbcc cleantable batch size explanation
What typically incentivizes a professor to change jobs to a lower ranking university?
Does an object always see its latest internal state irrespective of thread?
How to efficiently unroll a matrix by value with numpy?
What is a clear way to write a bar that has an extra beat?
Can an x86 CPU running in real mode be considered to be basically an 8086 CPU?
What is the word for reserving something for yourself before others do?
tikz convert color string to hex value
What does "Puller Prush Person" mean?
Why do I get two different answers for this counting problem?
Are the number of citations and number of published articles the most important criteria for a tenure promotion?
Codimension of non-flat locus
Accidentally leaked the solution to an assignment, what to do now? (I'm the prof)
Character reincarnated...as a snail
Client team has low performances and low technical skills: we always fix their work and now they stop collaborate with us. How to solve?
Can a Cauchy sequence converge for one metric while not converging for another?
How is the claim "I am in New York only if I am in America" the same as "If I am in New York, then I am in America?
If human space travel is limited by the G force vulnerability, is there a way to counter G forces?
How much of data wrangling is a data scientist's job?
LaTeX: Why are digits allowed in environments, but forbidden in commands?
Can a vampire attack twice with their claws using Multiattack?
Does detail obscure or enhance action?
How much RAM could one put in a typical 80386 setup?
Could an aircraft fly or hover using only jets of compressed air?
LaTeX: Why are digits allowed in environments, but forbidden in commands?
What exactly do csname and endcsname do?Why are some characters not allowed in command sequencesWhy does LaTeX make a distinction between commands and environments?Do all starred commands have anything in common?Why are some characters not allowed in command sequencesSuggestions for an automatic taxonomy environmentUse a character other than the backslash for commandsWhy are LaTeX macros so inconsistent?Are end… macro names reserved in LaTeX2e?Can't use command with square brackets in matrix environmentHow to control conditional statements within new commands and environmentsCreating Commands which Make New Environments
Finding out that I can have an environment named env2
, but no command cmd2
, I read Why are some characters not allowed in command sequences, but still I wonder:
Why are digits allowed in environments, but forbidden in commands? In my understanding digits delimit command names (inherited from plain TeX), but why doesn't that restriction apply to environments? Wouldn't it have been more consistent to forbid digits in environment names as well?
macros environments
add a comment |
Finding out that I can have an environment named env2
, but no command cmd2
, I read Why are some characters not allowed in command sequences, but still I wonder:
Why are digits allowed in environments, but forbidden in commands? In my understanding digits delimit command names (inherited from plain TeX), but why doesn't that restriction apply to environments? Wouldn't it have been more consistent to forbid digits in environment names as well?
macros environments
You actually can use numbers in commands. If you doexpandafterdefcsname mycommandwithanumber123456endcsname
you'll define a commandmycommandwithanumber123456
. The environments are created using thecsname
...endcsname
pair, so it's fine.
– Phelype Oleinik
6 hours ago
expandafterdefcsname macro2endcsnamecommand output
is valid syntax. You then must use it viacsname macro2endcsname
.
– Steven B. Segletes
6 hours ago
So the answer is "There are not forbidden, but they have to be used in a special way. Still it's recommended not to use them."?
– U. Windl
6 hours ago
add a comment |
Finding out that I can have an environment named env2
, but no command cmd2
, I read Why are some characters not allowed in command sequences, but still I wonder:
Why are digits allowed in environments, but forbidden in commands? In my understanding digits delimit command names (inherited from plain TeX), but why doesn't that restriction apply to environments? Wouldn't it have been more consistent to forbid digits in environment names as well?
macros environments
Finding out that I can have an environment named env2
, but no command cmd2
, I read Why are some characters not allowed in command sequences, but still I wonder:
Why are digits allowed in environments, but forbidden in commands? In my understanding digits delimit command names (inherited from plain TeX), but why doesn't that restriction apply to environments? Wouldn't it have been more consistent to forbid digits in environment names as well?
macros environments
macros environments
asked 6 hours ago
U. WindlU. Windl
1697
1697
You actually can use numbers in commands. If you doexpandafterdefcsname mycommandwithanumber123456endcsname
you'll define a commandmycommandwithanumber123456
. The environments are created using thecsname
...endcsname
pair, so it's fine.
– Phelype Oleinik
6 hours ago
expandafterdefcsname macro2endcsnamecommand output
is valid syntax. You then must use it viacsname macro2endcsname
.
– Steven B. Segletes
6 hours ago
So the answer is "There are not forbidden, but they have to be used in a special way. Still it's recommended not to use them."?
– U. Windl
6 hours ago
add a comment |
You actually can use numbers in commands. If you doexpandafterdefcsname mycommandwithanumber123456endcsname
you'll define a commandmycommandwithanumber123456
. The environments are created using thecsname
...endcsname
pair, so it's fine.
– Phelype Oleinik
6 hours ago
expandafterdefcsname macro2endcsnamecommand output
is valid syntax. You then must use it viacsname macro2endcsname
.
– Steven B. Segletes
6 hours ago
So the answer is "There are not forbidden, but they have to be used in a special way. Still it's recommended not to use them."?
– U. Windl
6 hours ago
You actually can use numbers in commands. If you do
expandafterdefcsname mycommandwithanumber123456endcsname
you'll define a command mycommandwithanumber123456
. The environments are created using the csname
...endcsname
pair, so it's fine.– Phelype Oleinik
6 hours ago
You actually can use numbers in commands. If you do
expandafterdefcsname mycommandwithanumber123456endcsname
you'll define a command mycommandwithanumber123456
. The environments are created using the csname
...endcsname
pair, so it's fine.– Phelype Oleinik
6 hours ago
expandafterdefcsname macro2endcsnamecommand output
is valid syntax. You then must use it via csname macro2endcsname
.– Steven B. Segletes
6 hours ago
expandafterdefcsname macro2endcsnamecommand output
is valid syntax. You then must use it via csname macro2endcsname
.– Steven B. Segletes
6 hours ago
So the answer is "There are not forbidden, but they have to be used in a special way. Still it's recommended not to use them."?
– U. Windl
6 hours ago
So the answer is "There are not forbidden, but they have to be used in a special way. Still it's recommended not to use them."?
– U. Windl
6 hours ago
add a comment |
1 Answer
1
active
oldest
votes
The restriction is in the scanner, tex's "eyes" in the texbook terminology. Any sequence of characters may be used as a command name, however after a character of catcode 0 (normally ) then tex scans the next non-letter (character of catcode other than 11) or a contiguous sequence of letters, and tokenizes it as a single csname token.
This means that foo123
normally parses as the token foo
followed by the three tokens 1
, 2
, 3
. Unless you make digits catcode 11. Similarly section*
is normally the token section
followed by the token *
.
environment names use do not require to parse the name via the escape character, (they use the csname
primitive but that's an implementation detail so begintabular
accesses tabular
but begintabular*
accesses the command with name tabular*
(not the two tokens that would normally be generated by parsing tabular*
).
So technically it would be quite hard to not allow digits (or other characters) in environment names, especially when latex was designed there was not the memory available to add that kind of character-by-character check.
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%2f483440%2flatex-why-are-digits-allowed-in-environments-but-forbidden-in-commands%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
The restriction is in the scanner, tex's "eyes" in the texbook terminology. Any sequence of characters may be used as a command name, however after a character of catcode 0 (normally ) then tex scans the next non-letter (character of catcode other than 11) or a contiguous sequence of letters, and tokenizes it as a single csname token.
This means that foo123
normally parses as the token foo
followed by the three tokens 1
, 2
, 3
. Unless you make digits catcode 11. Similarly section*
is normally the token section
followed by the token *
.
environment names use do not require to parse the name via the escape character, (they use the csname
primitive but that's an implementation detail so begintabular
accesses tabular
but begintabular*
accesses the command with name tabular*
(not the two tokens that would normally be generated by parsing tabular*
).
So technically it would be quite hard to not allow digits (or other characters) in environment names, especially when latex was designed there was not the memory available to add that kind of character-by-character check.
add a comment |
The restriction is in the scanner, tex's "eyes" in the texbook terminology. Any sequence of characters may be used as a command name, however after a character of catcode 0 (normally ) then tex scans the next non-letter (character of catcode other than 11) or a contiguous sequence of letters, and tokenizes it as a single csname token.
This means that foo123
normally parses as the token foo
followed by the three tokens 1
, 2
, 3
. Unless you make digits catcode 11. Similarly section*
is normally the token section
followed by the token *
.
environment names use do not require to parse the name via the escape character, (they use the csname
primitive but that's an implementation detail so begintabular
accesses tabular
but begintabular*
accesses the command with name tabular*
(not the two tokens that would normally be generated by parsing tabular*
).
So technically it would be quite hard to not allow digits (or other characters) in environment names, especially when latex was designed there was not the memory available to add that kind of character-by-character check.
add a comment |
The restriction is in the scanner, tex's "eyes" in the texbook terminology. Any sequence of characters may be used as a command name, however after a character of catcode 0 (normally ) then tex scans the next non-letter (character of catcode other than 11) or a contiguous sequence of letters, and tokenizes it as a single csname token.
This means that foo123
normally parses as the token foo
followed by the three tokens 1
, 2
, 3
. Unless you make digits catcode 11. Similarly section*
is normally the token section
followed by the token *
.
environment names use do not require to parse the name via the escape character, (they use the csname
primitive but that's an implementation detail so begintabular
accesses tabular
but begintabular*
accesses the command with name tabular*
(not the two tokens that would normally be generated by parsing tabular*
).
So technically it would be quite hard to not allow digits (or other characters) in environment names, especially when latex was designed there was not the memory available to add that kind of character-by-character check.
The restriction is in the scanner, tex's "eyes" in the texbook terminology. Any sequence of characters may be used as a command name, however after a character of catcode 0 (normally ) then tex scans the next non-letter (character of catcode other than 11) or a contiguous sequence of letters, and tokenizes it as a single csname token.
This means that foo123
normally parses as the token foo
followed by the three tokens 1
, 2
, 3
. Unless you make digits catcode 11. Similarly section*
is normally the token section
followed by the token *
.
environment names use do not require to parse the name via the escape character, (they use the csname
primitive but that's an implementation detail so begintabular
accesses tabular
but begintabular*
accesses the command with name tabular*
(not the two tokens that would normally be generated by parsing tabular*
).
So technically it would be quite hard to not allow digits (or other characters) in environment names, especially when latex was designed there was not the memory available to add that kind of character-by-character check.
edited 5 hours ago
Phelype Oleinik
24.9k54690
24.9k54690
answered 5 hours ago
David CarlisleDavid Carlisle
497k4111441892
497k4111441892
add a comment |
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%2f483440%2flatex-why-are-digits-allowed-in-environments-but-forbidden-in-commands%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
You actually can use numbers in commands. If you do
expandafterdefcsname mycommandwithanumber123456endcsname
you'll define a commandmycommandwithanumber123456
. The environments are created using thecsname
...endcsname
pair, so it's fine.– Phelype Oleinik
6 hours ago
expandafterdefcsname macro2endcsnamecommand output
is valid syntax. You then must use it viacsname macro2endcsname
.– Steven B. Segletes
6 hours ago
So the answer is "There are not forbidden, but they have to be used in a special way. Still it's recommended not to use them."?
– U. Windl
6 hours ago