LaTeX: Why are digits allowed in environments, but forbidden in commands? The 2019 Stack Overflow Developer Survey Results Are InWhat 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

Can a flute soloist sit?

What's the name of these plastic connectors

Worn-tile Scrabble

Loose spokes after only a few rides

Inverse Relationship Between Precision and Recall

What do I do when my TA workload is more than expected?

Why couldn't they take pictures of a closer black hole?

What is the most efficient way to store a numeric range?

If I can cast sorceries at instant speed, can I use sorcery-speed activated abilities at instant speed?

Slides for 30 min~1 hr Skype tenure track application interview

Why can't devices on different VLANs, but on the same subnet, communicate?

Does adding complexity mean a more secure cipher?

Did Scotland spend $250,000 for the slogan "Welcome to Scotland"?

Ubuntu Server install with full GUI

If a sorcerer casts the Banishment spell on a PC while in Avernus, does the PC return to their home plane?

Match Roman Numerals

Flight paths in orbit around Ceres?

Dropping list elements from nested list after evaluation

Is an up-to-date browser secure on an out-of-date OS?

Can you cast a spell on someone in the Ethereal Plane, if you are on the Material Plane and have the True Seeing spell active?

Is it correct to say the Neural Networks are an alternative way of performing Maximum Likelihood Estimation? if not, why?

Old scifi movie from the 50s or 60s with men in solid red uniforms who interrogate a spy from the past

Keeping a retro style to sci-fi spaceships?

Deal with toxic manager when you can't quit



LaTeX: Why are digits allowed in environments, but forbidden in commands?



The 2019 Stack Overflow Developer Survey Results Are InWhat 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










3















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?










share|improve this question






















  • 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
    Apr 5 at 22:36











  • expandafterdefcsname macro2endcsnamecommand output is valid syntax. You then must use it via csname macro2endcsname.

    – Steven B. Segletes
    Apr 5 at 22:36












  • 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
    Apr 5 at 22:41















3















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?










share|improve this question






















  • 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
    Apr 5 at 22:36











  • expandafterdefcsname macro2endcsnamecommand output is valid syntax. You then must use it via csname macro2endcsname.

    – Steven B. Segletes
    Apr 5 at 22:36












  • 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
    Apr 5 at 22:41













3












3








3


1






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?










share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Apr 5 at 22:32









U. WindlU. Windl

1718




1718












  • 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
    Apr 5 at 22:36











  • expandafterdefcsname macro2endcsnamecommand output is valid syntax. You then must use it via csname macro2endcsname.

    – Steven B. Segletes
    Apr 5 at 22:36












  • 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
    Apr 5 at 22:41

















  • 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
    Apr 5 at 22:36











  • expandafterdefcsname macro2endcsnamecommand output is valid syntax. You then must use it via csname macro2endcsname.

    – Steven B. Segletes
    Apr 5 at 22:36












  • 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
    Apr 5 at 22:41
















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
Apr 5 at 22:36





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
Apr 5 at 22:36













expandafterdefcsname macro2endcsnamecommand output is valid syntax. You then must use it via csname macro2endcsname.

– Steven B. Segletes
Apr 5 at 22:36






expandafterdefcsname macro2endcsnamecommand output is valid syntax. You then must use it via csname macro2endcsname.

– Steven B. Segletes
Apr 5 at 22:36














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
Apr 5 at 22:41





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
Apr 5 at 22:41










1 Answer
1






active

oldest

votes


















8














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.






share|improve this answer

























    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
    );



    );













    draft saved

    draft discarded


















    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









    8














    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.






    share|improve this answer





























      8














      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.






      share|improve this answer



























        8












        8








        8







        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.






        share|improve this answer















        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.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 5 at 23:24









        Phelype Oleinik

        25k54690




        25k54690










        answered Apr 5 at 23:19









        David CarlisleDavid Carlisle

        498k4111441893




        498k4111441893



























            draft saved

            draft discarded
















































            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%2f483440%2flatex-why-are-digits-allowed-in-environments-but-forbidden-in-commands%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

            Magento 1.9 observer on only new product added ( no updated product )Admin Create New Order ObserverObserver checkout_cart_product_add_after get product quantity in cartHow can I differentiate between product creation and saving existing products?How to get the original price Product SaveBeforeMagento Observer for Admin Sales order Address updateHow do i get quantity in a product_save_after event observer magento2?Using observer event to get updated customer infoSave product observer - detect availabilityEvent not triggered when new product added in admin : Magento 2magento 1.9 observer on quantity product change

            Does an object always see its latest internal state irrespective of thread? The 2019 Stack Overflow Developer Survey Results Are InDoes a finally block always get executed in Java?Java: serial thread confinement questionJava difference between fixed threadpool and scheduled threadpoolJackrabbit and concurrent modificationHow to stop a Runnable scheduled for repeated execution after a certain number of executionsMultiple threads accessing inner classHow can a loop be completed by two thread? say loop from count=1 to count=4 by ist thread and count =5 to 8 by 2nd thread?If I keep a reference to a Runnable, when does the Thread it ran on get released?How to stop a schedule ScheduledExecutorServiceHow to implement a singleThreadedScheduledExcecutor in wildfly

            Adding contour labels to SpatialLinesDataFrame or sf object? The Next CEO of Stack OverflowTearing of SpatialLinesDataFrame and problem with gClip functionAutomatically adjusting map labelsExtracting data.frame from simple features object in RR convert sf object back to SpatialPolygonsDataFrameSimplify polygons of sf objectlines of a SpatialLinesDataFrame corresponding to pointsCropping sf object in R?Pattern matching with grepl on SpatialPolygonsDataFrame object in RHow to create and empty SpatialLinesDataFrame in RWarning message in raster::rotate(): “this does not look like an appropriate object for this function”