[Résolu] Ne pas afficher le contenu d'un environnement

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

[Résolu] Ne pas afficher le contenu d'un environnement

Messagepar GRSG » Lundi 24 Août 2009, 07:27

Bonjour,
J'expose mon problème: je souhaite afficher ou non le contenu situé à l'intérieur d'un environnement. Par exemple:

Code: Tout sélectionner
\afficheenonce{false ou true}
\affichesolution{false ou true}

Exercice n\degre1
\begin{enumerate}

\item
\begin{enonce}
Enoncé de la question 1
\end{enonce}

\begin{solution}
Solution de la question 1
\end{solution}

\item

\begin{enumerate}
\item
\begin{enonce}
Enoncé de la question 2a
\end{enonce}

\begin{solution}
Solution de la question 2a
\end{solution}

\item
\begin{enonce}
Enoncé de la question 2b
\end{enonce}

\begin{solution}
Solution de la question 2b
\end{solution}

\end{enumerate}

\end{enumerate}


de façon à pouvoir afficher uniquement l'énoncé, uniquement les solutions ou les deux en même temps.

J'y arrive en faisant écrire le contenu que je ne souhaite pas afficher dans un fichier exterieur dont voici le code (à la base, un programme proposé par pg dans un autre contexte) :

Code: Tout sélectionner
\makeatletter
\newboolean{bsolution}
\newcommand{\affichesolution}[1]{%
\setboolean{bsolution}{#1}%
\ifthenelse{\boolean{bsolution}}%
{\renewenvironment{solution}{\color{black}}{\par}
}%
{
}
}
\makeatother

\makeatletter
\newboolean{benonce}
\newcommand{\afficheenonce}[1]{%
\setboolean{benonce}{#1}%
\ifthenelse{\boolean{benonce}}%
{\renewenvironment{enonce}{\color{black}}{\par}
}%
{
}
}
\makeatother

\makeatletter
\newwrite{\verbatim@out@six}
\def\initiatesolution#1{\immediate\openout \verbatim@out@six #1}
\def\solution{\bgroup\@bsphack
\let\do\@makeother\dospecials
\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\verbatim@out@six{\the\verbatim@line}}%
\verbatim@start}
\def\endsolution{\immediate\write\verbatim@out@six{ }\@esphack\egroup}
\def\terminatesolution{\immediate\closeout\verbatim@out@six}
\makeatother

\makeatletter
\newwrite{\verbatim@out@nine}
\def\initiateenonce#1{\immediate\openout \verbatim@out@nine #1}
\def\enonce{\bgroup\@bsphack
\let\do\@makeother\dospecials
\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\verbatim@out@nine{\the\verbatim@line}}%
\verbatim@start}
\def\endenonce{\immediate\write\verbatim@out@nine{ }\@esphack\egroup}
\def\terminateenonce{\immediate\closeout\verbatim@out@nine}
\makeatother

\begin{document}

\afficheenonce{true}
\affichesolution{true}


\initiatesolution{solution.tex}
\initiateenonce{enonce.tex}

Exercice n\degre1
\begin{enumerate}

\item
\begin{enonce}
Enoncé de la question 1
\end{enonce}

\begin{solution}
Solution de la question 1
\end{solution}

\item

\begin{enumerate}
\item
\begin{enonce}
Enoncé de la question 2a
\end{enonce}

\begin{solution}
Solution de la question 2a
\end{solution}

\item
\begin{enonce}
Enoncé de la question 2b
\end{enonce}

\begin{solution}
Solution de la question 2b
\end{solution}

\end{enumerate}

\end{enumerate}

\terminatesolution
\terminateenonce


Il y a sans doute plus simple à faire; d'où ma question...

Merci
Dernière édition par GRSG le Lundi 24 Août 2009, 15:37, édité 1 fois.
GRSG
Méga-utilisateur
 
Messages: 293
Inscription: Mercredi 08 Octobre 2008, 08:45
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Ne pas afficher le contenu d'un environnement

Messagepar pg » Lundi 24 Août 2009, 11:05

Je suppose que tu fais référence à ce message ?

Pour ne pas afficher le contenu d'un environnement, il y a le package comment. Voici un exemple (pour ne pas afficher un environnement, il faut utiliser \excludecomment{nom de l'environnement})

Code: Tout sélectionner
\documentclass{article}

\usepackage{comment}

\newtheorem{exercice}{Exercice}
\newtheorem{solution}{Solution}

% pour ne pas afficher les solutions
\excludecomment{solution}

% pour ne pas afficher les énoncés
%\excludecomment{exercice}

\begin{document}

\begin{exercice}
Texte du premier exercice.
\end{exercice}

\begin{solution}
Solution du premier exercice.
\end{solution}

\begin{exercice}
Texte du second exercice.
\end{exercice}

\begin{solution}
Solution du second exercice.
\end{solution}

\end{document}


(En relation avec le fil sur le problème de \tableofcontents, le package comment utilise un \newwrite, mais comme dans ce contexte tous les \newwrite que tu utilise semblent inutiles, ça ne devrait pas être un problème.)
pg
Modérateur
 
Messages: 2597
Inscription: Jeudi 14 Juin 2007, 23:31

Re: Ne pas afficher le contenu d'un environnement

Messagepar GRSG » Lundi 24 Août 2009, 13:31

J'ai essayé sur des environnements simples et ça marche.

Par contre, j'ai l'impression que ça ne marche pas si par exemple en définit l'environnement exercice de la façon suivante (l'environnement exercice fait intervenir un autre environnement)

Code: Tout sélectionner
\newenvironment{exercice}%
{\begin{minipage}{\linewidth}}{\end{minipage}}
GRSG
Méga-utilisateur
 
Messages: 293
Inscription: Mercredi 08 Octobre 2008, 08:45
Statut actuel: Actif et salarié | Enseignant

Re: Ne pas afficher le contenu d'un environnement

Messagepar pg » Lundi 24 Août 2009, 15:03

L'environnement minipage est relativement complexe donc récalcitrant à certains traitements. Par contre, pour d'autres environnements, comme itemize, il suffit de ne pas utiliser la forme \begin{itemize} ... \end{itemize} mais \itemize ... \enditemize (ce qui est à peu près équivalent). Exemple :

Code: Tout sélectionner
\documentclass{article}

\usepackage{comment}

\newenvironment{enumeration}{\itemize}{\enditemize}
\excludecomment{enumeration}

\begin{document}

Un enumeration :

\begin{enumeration}
   \item Du texte.
   \item Du texte.
\end{enumeration}

\end{document}

Pour les minipages, tu peux tout mettre dans une boite puis choisir ou non d'afficher cette boite. Voici un exemple :

Code: Tout sélectionner
\documentclass{article}

\newsavebox\boitetemporaire
\newif\ifafficheremarque
\newenvironment{remarque}
   {\begin{lrbox}{\boitetemporaire}%
    \begin{minipage}{\linewidth}%
    \textbf{Remarque.~}\ignorespaces
   }
   {\end{minipage}%
    \end{lrbox}%
    \ifafficheremarque
      \par\addvspace{6pt}%
      \unhbox\boitetemporaire
      \par\addvspace{6pt}%
    \fi
   }

\afficheremarquefalse
%\afficheremarquetrue

\begin{document}

Bla bla

\begin{remarque}
Texte de la remarque.
\end{remarque}

Bla bla

\end{document}
pg
Modérateur
 
Messages: 2597
Inscription: Jeudi 14 Juin 2007, 23:31

Re: Ne pas afficher le contenu d'un environnement

Messagepar GRSG » Lundi 24 Août 2009, 15:37

Ca fonctionne bien.

Je vais donc pouvoir entreprendre le grand nettoyage.

A quoi sert la commande \ignorespaces?

Merci

Gabriel
GRSG
Méga-utilisateur
 
Messages: 293
Inscription: Mercredi 08 Octobre 2008, 08:45
Statut actuel: Actif et salarié | Enseignant

Re: [résolu]Ne pas afficher le contenu d'un environnement

Messagepar pg » Lundi 24 Août 2009, 15:44

À ignorer les espaces après la fin du \begin{environnement}. Sinon, il peut, dans certains cas, y avoir une espace indésirable supplémentaire si on écrit

Code: Tout sélectionner
\begin{remarque}
Texte
\end{remarque}

Voici un exemple qui montre la différence :

Code: Tout sélectionner
\documentclass{article}

\newenvironment{remarqueavec}{\textbf{Remarque.~}\ignorespaces}{}
\newenvironment{remarquesans}{\textbf{Remarque.~}}{}

\begin{document}

\begin{remarqueavec}
Texte (avec)
\end{remarqueavec}

\begin{remarquesans}
Texte (sans)
\end{remarquesans}

\end{document}

ignorespaces.png
ignorespaces.png (4.36 Kio) Vu 4202 fois
pg
Modérateur
 
Messages: 2597
Inscription: Jeudi 14 Juin 2007, 23:31

Re: [Résolu] Ne pas afficher le contenu d'un environnement

Messagepar GRSG » Lundi 24 Août 2009, 17:26

En fait, j'ai repris un de tes programmes, je l'ai adapté en créant une commande \exclure et qui fonctionne avec tous les environnements contenant éventuellement un environnment minipage.

Le fichier poubelle est le fichier dans lequel est stocké tout ce que je ne veux pas voir affiché

Code: Tout sélectionner
\makeatletter
\newwrite{\verbatim@out@one}
\newcommand\initiatepoubelle[1]{\immediate\openout \verbatim@out@one #1}
\newcommand{\exclure}[1]{
\renewenvironment{#1}{\bgroup\@bsphack
\let\do\@makeother\dospecials
\catcode`\^^M\active
\def\verbatim@processline{%
\immediate\write\verbatim@out@one{\the\verbatim@line}}%
\verbatim@start}
{\immediate\write\verbatim@out@one{ }\@esphack\egroup}}
\def\terminatepoubelle{\immediate\closeout\verbatim@out@one}
\makeatother
GRSG
Méga-utilisateur
 
Messages: 293
Inscription: Mercredi 08 Octobre 2008, 08:45
Statut actuel: Actif et salarié | Enseignant

Re: [Résolu] Ne pas afficher le contenu d'un environnement

Messagepar GRSG » Jeudi 20 Juin 2013, 10:22

Bonjour,
En relisant la doc de Verbatim, il me semble être arrivé à une programmation un peu plus simple (et compatible avec minipage) pour ne pas afficher le contenu compris dans un environnement.

Voici le code:
Code: Tout sélectionner
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[frenchb]{babel}
\usepackage{verbatim}
\newenvironment{essai}{}{}
\newenvironment{truc}{}{}
\newcommand{\exclure}[1]{\renewenvironment{#1}{\begingroup\comment}{\endcomment\endgroup\ignorespaces}}
\exclure{essai}

\begin{document}
Ceci
et je passe à la ligne suivante
\begin{essai}
\begin{minipage}{\textwidth}
et cette ligne de l'environnement essai
\end{minipage}
\end{essai}
\begin{truc}
oulala de l'environnement truc
\end{truc}
\end{document}

Gabriel
GRSG
Méga-utilisateur
 
Messages: 293
Inscription: Mercredi 08 Octobre 2008, 08:45
Statut actuel: Actif et salarié | Enseignant


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Google [Bot] et 14 invités