Créer de nouveaux environnements numérotés

Outre les environnements habituels proposés nativement par LaTeX, il est possible d’en définir de nouveaux à la guise de l’utilisateur. Couplés avec de nouveaux compteurs, ils permettent une grande robustesse dans votre code et une plus grande facilité de lecture grâce aux hyperliens.

Définition d’un nouvel environnement

\newenvironment{Nom de l'environnement}
	<Commandes à exécuter à l'ouverture de l'environnement>
}{
	<Commandes à exécuter à la fermeture de l'environnement>
}

Définition d’un compteur associé à un environnement

Par défaut, un compteur n’est attribué à rien, c’est à l’environnement lui-même d’interagir avec le compteur. Commençons par définir un nouveau compteur, appelé NoCampagne :

\newcounter{NoCampagne}

Ce compteur servira par la suite à numéroter chaque campagne d’essai (d’où son nom…). Au début de chaque environnement campagne, on va donc incrémenter NoCampagne.

\newenvironment{campagne}{
		\refstepcounter{NoCampagne}
		\underline{Campagne \theNoCampagne~:}\\
	}{
 
 
	}

Ainsi, avec la commande suivante :

\begin{document}
	\begin{campagne}
		\label{campagneinterressante}
		Texte de la campagne \theNoCampagne.
	\end{campagne}
	\begin{campagne}
		Texte de la campagne \theNoCampagne.
	\end{campagne}
\end{document}

On obtient :

Environnement0

Références aux environnements personnels

Si vous avez bien suivi, alors aurez compris que ce n’est pas à l’environnement que l’on va faire référence, mais au compteur qui lui est associé. On va donc naturellement utiliser les commandes \label{} et \ref{} pour cela.

En fait, la commande \ref sert à afficher la valeur du dernier compteur à avoir été incrémenté avant \label. Dans mon exemple, il suffira donc d’utiliser la commande suivante pour afficher le numéro de la première campagne :

\ref{campagneinterressante}

Utilisation d’un compteur lié

On va maintenant définir un nouvel objet, que l’on appellera ici « Essai », de telle façon que chaque campagne soit constituée de différents essais. Le compteur associé à chaque essai (NoEssai) devra être réinitialisé à chaque nouvelle campagne, on va donc lier ce compteur au compteur NoCampagne :

\newcounter{NoEssai}[NoCampagne]

On va maintenant définir une nouvelle commande pour « créer » chaque essai, c’est-à-dire incrémenter le compteur et afficher sa valeur :

\newcommand{\newEssai}{\refstepcounter{NoEssai}\theNoEssai}

Pour gagner en lisibilité, j’ai décidé d’encapsuler les campagnes dans un cadre grâce au package framed  :

\newenvironment{campagne}{
		\refstepcounter{NoCampagne}
		\begin{framed}\noindent
			\underline{Campagne \theNoCampagne~:}\\
	}{
		\end{framed}
	}

Ainsi, le code suivant :

\begin{document}
	\begin{campagne}
		\label{camp:premier}
	  On réalise les essais \newEssai\label{essai:11} et \newEssai.\label{essai:12}
	\end{campagne}
 
	Les essais~\ref{essai:11} et~\ref{essai:12} de la campagne~\ref{camp:premier} permettent de valider le modèle. On va maintenant réaliser les essais suivants :
	\begin{campagne}
		\begin{tabular}{c|c}
			\newEssai	& Conditions A\\
			\hline
			\newEssai	& Conditions B
		\end{tabular}
	\end{campagne}
\end{document}

On obtient :

Environnement1

Numéroter les essais en fonction de la campagne

L’inconvénient de réinitialiser la numérotation des essais à chaque nouvelle campagne est bien sûr que l’on est alors obligé de spécifier de quelle campagne on parle pour être précis.

Admettons que nous ayons moins de dix essais par campagne. On peut alors choisir de changer de dizaine pour chaque nouvelle campagne (essais 11, 12 etc pour la campagne 1 ; essais 21, 22 etc pour la campagne 2 etc. etc.). Pour cela, il suffit de forcer la valeur du compteur NoEssai à chaque nouvelle campagne, grâce au package calc :

\newenvironment{campagne}{
		\refstepcounter{NoCampagne}
		\setcounter{NoEssai}{10*\value{NoCampagne}}
		\begin{framed}\noindent
			\underline{Campagne \theNoCampagne~:}\\
	}{
		\end{framed}
	}

Avec le même code que précédemment dans le document, on obtient donc :

Environnement2Comme vous pouvez le constater, il devient alors obsolète de préciser le numéro de la campagne.

Gestion des hyperliens

Comme vous pouvez le voir dans les exemple précédents, les hyperliens générés par le package hyperref fonctionnent parfaitement avec nos compteurs perso !

Bonnes compilations !