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
New contributor
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
New contributor
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, yourlet
- 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
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
New contributor
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
New contributor
New contributor
edited 7 hours ago
New contributor
asked 8 hours ago
Anton Lioznov
183
183
New contributor
New contributor
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, yourlet
- 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
add a comment |
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, yourlet
- 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
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.
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
});
}
});
Anton Lioznov is a new contributor. Be nice, and check out our Code of Conduct.
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.
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.
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.
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.
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}
answered 6 hours ago
Christian Hupfer
147k14191382
147k14191382
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 8 hours ago
samcarter
85.5k794273
85.5k794273
add a comment |
add a comment |
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.
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.
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
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