Que font \newenvironment
et \renewenvironment
?#
La commande \newenvironment
sert à définir un environnement tandis que \renewenvironment
sert à redéfinir un environnement préexistant. Ces commandes sont assez semblables aux commandes \newcommand
et \renewcommand
de la question « À quoi servent les commandes \newcommand et \renewcommand ? » mais présentent un argument obligatoire supplémentaire, le code inséré à la fin de l’environnement.
1. Syntaxe des commandes#
La syntaxe de \newenvironment
et de \renewenvironment
présente trois formes dépendant de la présence d’arguments et de la présence d’arguments optionnels. Ne sont données ici que celles de \newenvironment
, celles de \renewenvironment
étant identiques :
% Forme sans argument
\newenvironment{⟨nom⟩}{⟨déf_début⟩}{⟨déf_fin⟩}
% Forme avec arguments non optionnels
\newenvironment{⟨nom⟩}[⟨nb_args⟩]{⟨déf_début⟩}{⟨déf_fin⟩}
% Forme avec arguments, dont un, le premier, est optionnel
\newenvironment{⟨nom⟩}[⟨nb_args⟩][⟨défaut⟩]{⟨déf_début⟩}{⟨déf_fin⟩}
Les paramètres suivent les règles suivantes :
le
⟨nom⟩
de l’environnement ne commence pas par une contre-oblique, contrairement à ce qui se fait avec\newcommand
;dans la forme avec arguments, le nombre
⟨nb_args⟩
est compris entre 1 et 9 et donne le nombre d’arguments. Ces éventuels arguments de l’environnement devront être fournis au moment du\begin{⟨nom⟩}
dans des groupes d’accolades ;⟨défaut⟩
est à valeur par défaut du premier argument ;⟨déf_début⟩
est le code qui sera placé en début d’environnement. Ce code pourra contenir les arguments de l’environnement avec la notation#
suivi du numéro de l’argument souhaité ;⟨déf_fin⟩
est le code placé en fin d’environnement. Ce code ne peut contenir les arguments d’environnement.
En voici un exemple d’utilisation (largement perfectible) :
\documentclass{article}
\usepackage{lmodern} % Caractères plus lisibles
\pagestyle{empty} % N'affiche pas de numéro de page
\newenvironment{tirade}[1]{%
\\ \textsc{#1} : }%
{(...)}
\begin{document}
Et voici un extrait d'une tirade célèbre de Molière :
\begin{tirade}{Harpagon}
Au voleur, au voleur, à l'assassin, au meurtrier. Justice
\end{tirade}
\end{document}
1.1. La gestion des paramètres en fin d’environnement#
Les paramètres d’environnement ne sont pas transmis au code en fin d’environnement ⟨déf_fin⟩
. Dès lors, le code suivant pose problème :
\newenvironment{tirade}[2][(...)]%
{\\ \textsc{#2} : }%
{#1}
Il se produit ici l’erreur suivante (détaillée à la question « Que signifie l’erreur : « Illegal parameter number in definition of ⟨commande⟩ » ? » :
! Illegal parameter number in definition of \endtirade.
Une solution à ce problème passe par l’utilisation d’une définition de commande placée dans l’argument ⟨déf_début⟩
. Il faut noter que la commande définie à l’intérieur de l’environnement n’a de sens que dans celui-ci et est inconnue à l’extérieur de celui-ci. L’exemple suivant illustre cette méthode ainsi que le cas d’un argument facultatif.
\documentclass{article}
\usepackage{lmodern} % Caractères plus lisibles
\pagestyle{empty} % N'affiche pas de numéro de page
\newenvironment{tirade}[2][(...)]{%
\newcommand{\fintirade}{#1}% Commande provisoire pour passer l'argument #1
\\ \textsc{#2} : }%
{\fintirade}
\begin{document}
Et voici un extrait d'une tirade célèbre de Molière :
\begin{tirade}{Harpagon}
Au voleur, au voleur, à l'assassin, au meurtrier. Justice
\end{tirade}
Et une seconde, tout aussi renommée :
\begin{tirade}[]{Géronte}
Mais que diable allait-il faire à cette galère ?
\end{tirade}
\end{document}
Sources