Environment decorators












3














I'm looking for a way to write a "decorator" (in Python terminology) or a "wrapper" for LaTeX environments: a way to give addition behaviour with save of the notation. For example, before every begin{quote} execute a code that will add a hrule.



I could make it for a single command using let:



letoldCommandcommandIWantToDecorate
defcommandIWantToDecorate#1{<addition code>oldCommand{#1}}


That will execute <addition code> without the need to change the command throughout the document.



Is there a similar way to decorate the whole environment? Maybe LaTeX creates some inner macros I can work with?



UPD the question Can I redefine a command to contain itself? doesn't solve my problem, because I'm interested in redefining environments, not solo macros.



The etoolbox package partly solve the problem, thanks @samcarter!



But in "education" reasons I'm interesting is there a way to do decorate without additional packages, using just (La)TeX pre-build commands?










share|improve this question









New contributor




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
















  • 2




    Possible duplicate of Can I redefine a command to contain itself?
    – Timothy Truckle
    8 hours ago










  • Welcome to TeX.Stackexchange!
    – samcarter
    7 hours ago










  • By the way, your let - version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
    – Christian Hupfer
    6 hours ago
















3














I'm looking for a way to write a "decorator" (in Python terminology) or a "wrapper" for LaTeX environments: a way to give addition behaviour with save of the notation. For example, before every begin{quote} execute a code that will add a hrule.



I could make it for a single command using let:



letoldCommandcommandIWantToDecorate
defcommandIWantToDecorate#1{<addition code>oldCommand{#1}}


That will execute <addition code> without the need to change the command throughout the document.



Is there a similar way to decorate the whole environment? Maybe LaTeX creates some inner macros I can work with?



UPD the question Can I redefine a command to contain itself? doesn't solve my problem, because I'm interested in redefining environments, not solo macros.



The etoolbox package partly solve the problem, thanks @samcarter!



But in "education" reasons I'm interesting is there a way to do decorate without additional packages, using just (La)TeX pre-build commands?










share|improve this question









New contributor




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
















  • 2




    Possible duplicate of Can I redefine a command to contain itself?
    – Timothy Truckle
    8 hours ago










  • Welcome to TeX.Stackexchange!
    – samcarter
    7 hours ago










  • By the way, your let - version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
    – Christian Hupfer
    6 hours ago














3












3








3







I'm looking for a way to write a "decorator" (in Python terminology) or a "wrapper" for LaTeX environments: a way to give addition behaviour with save of the notation. For example, before every begin{quote} execute a code that will add a hrule.



I could make it for a single command using let:



letoldCommandcommandIWantToDecorate
defcommandIWantToDecorate#1{<addition code>oldCommand{#1}}


That will execute <addition code> without the need to change the command throughout the document.



Is there a similar way to decorate the whole environment? Maybe LaTeX creates some inner macros I can work with?



UPD the question Can I redefine a command to contain itself? doesn't solve my problem, because I'm interested in redefining environments, not solo macros.



The etoolbox package partly solve the problem, thanks @samcarter!



But in "education" reasons I'm interesting is there a way to do decorate without additional packages, using just (La)TeX pre-build commands?










share|improve this question









New contributor




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











I'm looking for a way to write a "decorator" (in Python terminology) or a "wrapper" for LaTeX environments: a way to give addition behaviour with save of the notation. For example, before every begin{quote} execute a code that will add a hrule.



I could make it for a single command using let:



letoldCommandcommandIWantToDecorate
defcommandIWantToDecorate#1{<addition code>oldCommand{#1}}


That will execute <addition code> without the need to change the command throughout the document.



Is there a similar way to decorate the whole environment? Maybe LaTeX creates some inner macros I can work with?



UPD the question Can I redefine a command to contain itself? doesn't solve my problem, because I'm interested in redefining environments, not solo macros.



The etoolbox package partly solve the problem, thanks @samcarter!



But in "education" reasons I'm interesting is there a way to do decorate without additional packages, using just (La)TeX pre-build commands?







macros environments






share|improve this question









New contributor




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











share|improve this question









New contributor




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









share|improve this question




share|improve this question








edited 7 hours ago





















New contributor




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









asked 8 hours ago









Anton Lioznov

183




183




New contributor




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





New contributor





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






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








  • 2




    Possible duplicate of Can I redefine a command to contain itself?
    – Timothy Truckle
    8 hours ago










  • Welcome to TeX.Stackexchange!
    – samcarter
    7 hours ago










  • By the way, your let - version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
    – Christian Hupfer
    6 hours ago














  • 2




    Possible duplicate of Can I redefine a command to contain itself?
    – Timothy Truckle
    8 hours ago










  • Welcome to TeX.Stackexchange!
    – samcarter
    7 hours ago










  • By the way, your let - version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
    – Christian Hupfer
    6 hours ago








2




2




Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
8 hours ago




Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
8 hours ago












Welcome to TeX.Stackexchange!
– samcarter
7 hours ago




Welcome to TeX.Stackexchange!
– samcarter
7 hours ago












By the way, your let - version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
– Christian Hupfer
6 hours ago




By the way, your let - version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
– Christian Hupfer
6 hours ago










2 Answers
2






active

oldest

votes


















4














The LaTeX kernel provides g@addto@macro which works for the environment starter command as well, i.e. for the environment quote the start macro is quote, so say g@addto@macroquote{foo} etc.



No extra packages are needed for this, apart from the specific additions that are to be made, but that depends on personal choices of the O.P.



documentclass{book}

makeatletter
g@addto@macroquote{hrule
medskip

textit{be careful}

medskip

Now the real stuff beginsdots

}
makeatother

begin{document}

begin{quote}
test
end{quote}

end{document}


enter image description here






share|improve this answer





























    5














    Have a look at the etoolbox package, in particular to its AtBeginEnvironment command. This allows you to add aditional code to the begin of environment.



    documentclass{book}

    usepackage{etoolbox}
    AtBeginEnvironment{quote}{hrule}

    begin{document}

    begin{quote}
    test
    end{quote}

    end{document}





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


      }
      });






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










      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f467435%2fenvironment-decorators%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









      4














      The LaTeX kernel provides g@addto@macro which works for the environment starter command as well, i.e. for the environment quote the start macro is quote, so say g@addto@macroquote{foo} etc.



      No extra packages are needed for this, apart from the specific additions that are to be made, but that depends on personal choices of the O.P.



      documentclass{book}

      makeatletter
      g@addto@macroquote{hrule
      medskip

      textit{be careful}

      medskip

      Now the real stuff beginsdots

      }
      makeatother

      begin{document}

      begin{quote}
      test
      end{quote}

      end{document}


      enter image description here






      share|improve this answer


























        4














        The LaTeX kernel provides g@addto@macro which works for the environment starter command as well, i.e. for the environment quote the start macro is quote, so say g@addto@macroquote{foo} etc.



        No extra packages are needed for this, apart from the specific additions that are to be made, but that depends on personal choices of the O.P.



        documentclass{book}

        makeatletter
        g@addto@macroquote{hrule
        medskip

        textit{be careful}

        medskip

        Now the real stuff beginsdots

        }
        makeatother

        begin{document}

        begin{quote}
        test
        end{quote}

        end{document}


        enter image description here






        share|improve this answer
























          4












          4








          4






          The LaTeX kernel provides g@addto@macro which works for the environment starter command as well, i.e. for the environment quote the start macro is quote, so say g@addto@macroquote{foo} etc.



          No extra packages are needed for this, apart from the specific additions that are to be made, but that depends on personal choices of the O.P.



          documentclass{book}

          makeatletter
          g@addto@macroquote{hrule
          medskip

          textit{be careful}

          medskip

          Now the real stuff beginsdots

          }
          makeatother

          begin{document}

          begin{quote}
          test
          end{quote}

          end{document}


          enter image description here






          share|improve this answer












          The LaTeX kernel provides g@addto@macro which works for the environment starter command as well, i.e. for the environment quote the start macro is quote, so say g@addto@macroquote{foo} etc.



          No extra packages are needed for this, apart from the specific additions that are to be made, but that depends on personal choices of the O.P.



          documentclass{book}

          makeatletter
          g@addto@macroquote{hrule
          medskip

          textit{be careful}

          medskip

          Now the real stuff beginsdots

          }
          makeatother

          begin{document}

          begin{quote}
          test
          end{quote}

          end{document}


          enter image description here







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 6 hours ago









          Christian Hupfer

          147k14191382




          147k14191382























              5














              Have a look at the etoolbox package, in particular to its AtBeginEnvironment command. This allows you to add aditional code to the begin of environment.



              documentclass{book}

              usepackage{etoolbox}
              AtBeginEnvironment{quote}{hrule}

              begin{document}

              begin{quote}
              test
              end{quote}

              end{document}





              share|improve this answer


























                5














                Have a look at the etoolbox package, in particular to its AtBeginEnvironment command. This allows you to add aditional code to the begin of environment.



                documentclass{book}

                usepackage{etoolbox}
                AtBeginEnvironment{quote}{hrule}

                begin{document}

                begin{quote}
                test
                end{quote}

                end{document}





                share|improve this answer
























                  5












                  5








                  5






                  Have a look at the etoolbox package, in particular to its AtBeginEnvironment command. This allows you to add aditional code to the begin of environment.



                  documentclass{book}

                  usepackage{etoolbox}
                  AtBeginEnvironment{quote}{hrule}

                  begin{document}

                  begin{quote}
                  test
                  end{quote}

                  end{document}





                  share|improve this answer












                  Have a look at the etoolbox package, in particular to its AtBeginEnvironment command. This allows you to add aditional code to the begin of environment.



                  documentclass{book}

                  usepackage{etoolbox}
                  AtBeginEnvironment{quote}{hrule}

                  begin{document}

                  begin{quote}
                  test
                  end{quote}

                  end{document}






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 8 hours ago









                  samcarter

                  85.5k794273




                  85.5k794273






















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










                      draft saved

                      draft discarded


















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













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












                      Anton Lioznov 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.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • 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%2f467435%2fenvironment-decorators%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

                      What visual should I use to simply compare current year value vs last year in Power BI desktop

                      How to ignore python UserWarning in pytest?

                      Alexandru Averescu