Environment decorators
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
add a comment |
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
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
Dec 26 '18 at 19:26
Welcome to TeX.Stackexchange!
– user36296
Dec 26 '18 at 19:31
By the way, yourlet
- version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
– user31729
Dec 26 '18 at 21:10
add a comment |
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
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
macros environments
edited Dec 26 '18 at 19:40
Anton Lioznov
asked Dec 26 '18 at 19:24
Anton LioznovAnton Lioznov
13815
13815
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
Dec 26 '18 at 19:26
Welcome to TeX.Stackexchange!
– user36296
Dec 26 '18 at 19:31
By the way, yourlet
- version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
– user31729
Dec 26 '18 at 21:10
add a comment |
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
Dec 26 '18 at 19:26
Welcome to TeX.Stackexchange!
– user36296
Dec 26 '18 at 19:31
By the way, yourlet
- version above would work for the environment starter macro as well, unless it has optional arguments -- then problems will appear
– user31729
Dec 26 '18 at 21:10
2
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
Dec 26 '18 at 19:26
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
Dec 26 '18 at 19:26
Welcome to TeX.Stackexchange!
– user36296
Dec 26 '18 at 19:31
Welcome to TeX.Stackexchange!
– user36296
Dec 26 '18 at 19:31
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– user31729
Dec 26 '18 at 21:10
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– user31729
Dec 26 '18 at 21:10
add a comment |
2 Answers
2
active
oldest
votes
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, but in general 'anything' can be placed in g@addto@macroquote{...}
.
letoldquotequote
renewcommand{quote}{fooadditionoldquote}
would work as well, but this may fail for other environments that have optional arguments. In this case, LetLtxMacro
from letltxmacro
package is needed, which means another package, however.
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}
add a comment |
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}
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%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
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, but in general 'anything' can be placed in g@addto@macroquote{...}
.
letoldquotequote
renewcommand{quote}{fooadditionoldquote}
would work as well, but this may fail for other environments that have optional arguments. In this case, LetLtxMacro
from letltxmacro
package is needed, which means another package, however.
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}
add a comment |
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, but in general 'anything' can be placed in g@addto@macroquote{...}
.
letoldquotequote
renewcommand{quote}{fooadditionoldquote}
would work as well, but this may fail for other environments that have optional arguments. In this case, LetLtxMacro
from letltxmacro
package is needed, which means another package, however.
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}
add a comment |
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, but in general 'anything' can be placed in g@addto@macroquote{...}
.
letoldquotequote
renewcommand{quote}{fooadditionoldquote}
would work as well, but this may fail for other environments that have optional arguments. In this case, LetLtxMacro
from letltxmacro
package is needed, which means another package, however.
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}
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, but in general 'anything' can be placed in g@addto@macroquote{...}
.
letoldquotequote
renewcommand{quote}{fooadditionoldquote}
would work as well, but this may fail for other environments that have optional arguments. In this case, LetLtxMacro
from letltxmacro
package is needed, which means another package, however.
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}
edited Dec 27 '18 at 12:39
answered Dec 26 '18 at 20:58
user31729
add a comment |
add a comment |
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}
add a comment |
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}
add a comment |
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}
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}
answered Dec 26 '18 at 19:29
user36296user36296
1
1
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%2f467435%2fenvironment-decorators%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
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
Dec 26 '18 at 19:26
Welcome to TeX.Stackexchange!
– user36296
Dec 26 '18 at 19:31
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– user31729
Dec 26 '18 at 21:10