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
yesterday
Welcome to TeX.Stackexchange!
– samcarter
yesterday
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
yesterday
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 yesterday
New contributor
asked yesterday
Anton Lioznov
434
434
New contributor
New contributor
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
yesterday
Welcome to TeX.Stackexchange!
– samcarter
yesterday
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
yesterday
add a comment |
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
yesterday
Welcome to TeX.Stackexchange!
– samcarter
yesterday
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
yesterday
2
2
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
yesterday
Possible duplicate of Can I redefine a command to contain itself?
– Timothy Truckle
yesterday
Welcome to TeX.Stackexchange!
– samcarter
yesterday
Welcome to TeX.Stackexchange!
– samcarter
yesterday
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
yesterday
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
yesterday
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
});
}
});
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, 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 15 hours ago
answered yesterday
Christian Hupfer
147k14192384
147k14192384
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 yesterday
samcarter
85.6k794274
85.6k794274
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
yesterday
Welcome to TeX.Stackexchange!
– samcarter
yesterday
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
yesterday