Que sont les environnements LaTeX?

Les environnements ont été mis en place avec \LaTeX : ils effectuent une action sur la totalité d'un bloc délimité dans le document plutôt que d'agir en un point donné de votre document.

Environnement sans paramètre

Un environnement simple pourrait changer la police utilisée pour une partie du texte. En voici un exemple de définition :

\newenvironment{chassefixe}%
  {% Code exécuté au début de l'environnement
   \ttfamily}%
  {% Code exécuté en fin d'environnement
  }

L'environnement chassefixe ainsi défini peut ensuite être utilisé de la manière suivante :

Voici un exemple%
\begin{chassefixe}
de texte à chasse fixe.
\end{chassefixe}

<latexdoc> \documentclass{article}

\usepackage{lmodern}
\pagestyle{empty}

\newenvironment{chassefixe}%

{\ttfamily}%
{}

\begin{document} Voici un exemple% \begin{chassefixe} de texte à chasse fixe. \end{chassefixe} \end{document} </latexdoc>

Certains environnements s'avèrent autrement plus complexes tel document. Simple d'usage, il n'en appelle pas moins des codes \TeX peu évidents. De fait, la plupart des environnements sont plus élaborés que chassefixe et beaucoup plus simples que document.

Un environnement place son contenu dans un groupe \TeX, de sorte que les commandes utilisées à l'intérieur de l'environnement « ne s'en échappent pas ». Ainsi, l'environnement chassefixe, ci-dessus, restreint son effet à son propre contenu (ce qui figure entre \begin{chassefixe} et \end{chassefixe}), ce qui correspond exactement à notre besoin.

Certains environnements simples ne nous font pas gagner beaucoup de temps en matière de saisie. De fait, notre environnement chassefixe pourrait être remplacé par :
Voici un exemple {\ttfamily de texte à chasse fixe.}

Cependant, ces environnements :

  • peuvent rendre votre code plus lisible ;
  • permettent de mieux gérer la mise en forme de votre document. Ainsi, modifier la définition de votre environnement modifiera la mise en forme de tous les environnements présents dans votre document.

Environnement avec paramètres

\LaTeX permet également d'utiliser des paramètres avec les environnements. Voici un exemple d'environnement demandant un paramètre :

\newenvironment{blocfonte}[1]%
  {#1\selectfont}%
  {}

Cet environnement s'utilise alors ainsi (et produit ici le même résultat que l'environnement chassefixe vu plus haut) :

Voici un exemple%
\begin{blocfonte}{\ttfamily}
de texte à chasse fixe.
\end{blocfonte}

Les paramètres optionnels

Les environnements peuvent également avoir des paramètres optionnels, à l'image des commandes. Voici un exemple :

\newenvironment{textespecial}[1][\itshape]%
  {#1}%
  {}

En temps normal, cet environnement compose son contenu en italique mais, dès qu'un paramètre lui est transmis, il modifie la mise en forme (ici, une nouvelle fois pour restituer la mise en forme obtenue avec chassefixe) :

Voici un exemple%
\begin{textespecial}{\ttfamily}
de texte à chasse fixe.
\end{textespecial}

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ès lors, le code suivant pose problème :

\newenvironment{textespecial}[1][extrait]%
  {Ici commence notre #1.}%
  {Ici finit notre #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 \endtextespecial.

Aussi, si vous devez passer un paramètre d'environnement dans le code de fin d'environnement, vous devez le transmettre par le biais d'une commande intermédiaire contenant votre paramètre placée dans le code de début d'environnement :

\newenvironment{textespecial}[1][extrait]%
  {Ici commence notre #1.%
   \newcommand{\transfert}{#1}}%
  {Ici finit notre \transfert.}

Source: What are LaTeX “environments”

2_programmation/macros/que_sont_les_environnements.txt · Dernière modification: 2021/11/27 10:02 de yannick.tanguy
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0