Environnement tcolorbox conditionnel

Tout ce qui concerne le langage TeX/LaTeX et ses variantes. Ce langage est utilisable sur le forum via les balises tex.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
Ophiucus02
Utilisateur confirmé
Utilisateur confirmé
Messages : 26
Inscription : vendredi 18 octobre 2013, 17:29
Statut actuel : Enseignant

Environnement tcolorbox conditionnel

Message non lu par Ophiucus02 »

Je souhaiterait que la boite colorée "correction" s'affiche seulement si le booléen \correction est vrai :

Code : Tout sélectionner

\documentclass[a4paper,10pt,french]{article}
\usepackage{ifthen}
\newboolean{correction}
\setboolean{correction}{false}
\newcommand{\corrige}{
    \setboolean{correction}{true}
}
\newcommand{\necorrigepas}{
    \setboolean{correction}{false}
}
\usepackage{tcolorbox}
\usepackage{environ}
\ExplSyntaxOn
\newif\ifcorrection
    \newtcolorbox{correction}{colback=pink!10,colframe=pink,arc=0mm,fonttitle=\bfseries,title={Correction :}}
\fi
\ExplSyntaxOff
\begin{document}
    \necorrigepas
    %\corrige
    \begin{correction}
        test
    \end{correction}
\end{document}
J'ai essayé d'utiliser \NewEnviron{}{} mais je tourne en rond et n'arrive pas au résultat voulu.
Dans la configuration présentée, la tcolorbox ne devrait pas s'afficher.

Auriez-vous une solution à m'apporter ? Merci.

Bien cordialement.
MB
Administrateur
Administrateur
Messages : 8104
Inscription : samedi 28 mai 2005, 14:23
Statut actuel : Enseignant

Re: Environnement tcolorbox conditionnel

Message non lu par MB »

Bonjour, je propose le code suivant.

Code : Tout sélectionner

\documentclass[a4paper,10pt,french]{article}
\usepackage{ifthen}
\newboolean{correction}
\setboolean{correction}{false}
\newcommand{\corrige}{
    \setboolean{correction}{true}
}
\newcommand{\necorrigepas}{
    \setboolean{correction}{false}
}
\usepackage{tcolorbox}
\usepackage{environ}

\newtcolorbox{tcbcorrection}{colback=pink!10,colframe=pink,arc=0mm,fonttitle=\bfseries,title={Correction :}}
\NewEnviron{correction}{\ifcorrection\tcbcorrection\BODY\endtcbcorrection\fi}

\begin{document}
    \necorrigepas
    \begin{correction}
        la correction n'est pas affichée.
    \end{correction}
    \corrige
    \begin{correction}
        la correction est affichée.
    \end{correction}
\end{document}
MB. Rejoignez notre partenaire pCloud et bénéficiez de 10Go de stockage gratuits ou d'une offre premium !
Pas d'aide en message privé. Merci de consulter ce sujet avant de poster votre premier message.
Ophiucus02
Utilisateur confirmé
Utilisateur confirmé
Messages : 26
Inscription : vendredi 18 octobre 2013, 17:29
Statut actuel : Enseignant

Re: Environnement tcolorbox conditionnel

Message non lu par Ophiucus02 »

Merci pour votre aide.
cagocagette
Utilisateur débutant
Utilisateur débutant
Messages : 3
Inscription : vendredi 08 novembre 2024, 19:23
Statut actuel : Enseignant

Re: Environnement tcolorbox conditionnel

Message non lu par cagocagette »

Bonjour,

Merci pour le partage de cette solution très élégante que je souhaite utiliser.
Cependant je rencontre un problème lorsque je souhaite afficher un graphique dans la boite.

Par exemple, les lignes suivantes renvoient un message d'erreur.

Code : Tout sélectionner

\begin{correction}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel={$f(x) = x^2 - x +4$}]
\addplot {x^2 - x +4};
\end{axis}
\end{tikzpicture}
\end{correction}
Le problème semble venir de l'environnement axis.
Est-il possible d'utiliser la boite de correction avec un graphique à l'intérieur ?

Merci pour toute proposition.
marco56
Utilisateur chevronné
Utilisateur chevronné
Messages : 1143
Inscription : jeudi 25 novembre 2010, 22:10

Re: Environnement tcolorbox conditionnel

Message non lu par marco56 »

ECM...
cagocagette
Utilisateur débutant
Utilisateur débutant
Messages : 3
Inscription : vendredi 08 novembre 2024, 19:23
Statut actuel : Enseignant

Re: Environnement tcolorbox conditionnel

Message non lu par cagocagette »

Toutes mes excuses.
En voulant proposer un MWE, je me suis rendu compte que l'utilisation d'un graphique dans l'environnement correction proposé ici est parfaitement possible.
Il doit y avoir un conflit de 2 packages qui explique pourquoi ça ne marche pas dans mon document...

J'ai voulu supprimer mon précédent message mais je n'y suis pas parvenu (peut-être n'est-ce pas possible ?).
Désolé et bonne journée.
cagocagette
Utilisateur débutant
Utilisateur débutant
Messages : 3
Inscription : vendredi 08 novembre 2024, 19:23
Statut actuel : Enseignant

Re: Environnement tcolorbox conditionnel

Message non lu par cagocagette »

Désolé, c'est encore moi.

Après analyse du problème, je me rend compte que l'utilisation du package \usetikzlibrary{babel} (dont j'ai besoin pour représenter des circuits électriques) semble incompatible avec \usepackage[francais]{babel}.
En effet, si je supprime la ligne \usetikzlibrary{babel} dans le code ci-dessous alors le graphique s'affiche. Sinon ça ne compile pas.
Mes recherches sur le forum (ici par exemple : viewtopic.php?t=11865) ne m'ont pas permis de trouver une solution permettant d'utiliser l'environnement correction tout en ayant la commande \usepackage[francais]{babel} dans le préambule.

Actuellement j'essaye pleins de trucs et rien ne marche...
Merci si jamais quelqu'un a eu idée!

Code : Tout sélectionner

\documentclass[a4paper,10pt,french]{article}
\usepackage{ifthen}
\newboolean{correction}
\setboolean{correction}{false}
\newcommand{\corrige}{
    \setboolean{correction}{true}
}
\newcommand{\necorrigepas}{
    \setboolean{correction}{false}
}
\usepackage{tcolorbox}
\usepackage{environ}

\newtcolorbox{tcbcorrection}{colback=pink!10,colframe=pink,arc=0mm,fonttitle=\bfseries,title={Correction :}}
\NewEnviron{correction}{\ifcorrection\tcbcorrection\BODY\endtcbcorrection\fi}


\usepackage[francais]{babel} 
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{babel}

\begin{document}
    \corrige
    
\begin{correction}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel={$f(x) = x^2 - x +4$}]
\addplot {x^2 - x +4};
\end{axis}
\end{tikzpicture}
\end{correction}
    
\end{document}
projetmbc
Utilisateur chevronné
Utilisateur chevronné
Messages : 2299
Inscription : samedi 29 décembre 2007, 00:58

Re: Environnement tcolorbox conditionnel

Message non lu par projetmbc »

Quelle est l'utilité de \usetikzlibrary{babel} ?
pg
Modérateur spécialisé
Modérateur spécialisé
Messages : 2621
Inscription : vendredi 15 juin 2007, 00:31

Re: Environnement tcolorbox conditionnel

Message non lu par pg »

C'est un problème avec ";" et babel. Une méthode serait de désactiver l'action de babel sur ";" avec \shorthandoff{;} en le rajoutant juste après le \begin{document} (et en tapant alors toujours bien l'espace avant le ";" voire carrément "~;" pour éviter tout éventuel saut de lignes disgracieux avant le ";").

Mais une autre possibilité est de ne pas utiliser le package environ et utiliser la méthode suivante pour créer un environnement qui réagit au booléen correction sans le défaut d'interagir avec les caractères modifiés par babel :

Code : Tout sélectionner

\documentclass[a4paper,10pt,french]{article}
\usepackage{ifthen}
\newboolean{correction}
\setboolean{correction}{false}
\newcommand{\corrige}{
    \setboolean{correction}{true}
}
\newcommand{\necorrigepas}{
    \setboolean{correction}{false}
}
\usepackage{tcolorbox}

\newtcolorbox{tcbcorrection}{colback=pink!10,colframe=pink,arc=0mm,fonttitle=\bfseries,title={Correction :}}

\newsavebox{\emptysavebox}
\newenvironment{emptyenv}
    {\begin{lrbox}{\emptysavebox}\begin{minipage}{\textwidth}}
    {\end{minipage}\end{lrbox}}

\newenvironment{correction}
    {\ifcorrection\expandafter\tcbcorrection\else\expandafter\emptyenv\fi}
    {\ifcorrection\expandafter\endtcbcorrection\else\expandafter\endemptyenv\fi}

\usepackage[francais]{babel} 
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{babel}

\begin{document}
    \corrige
    %\necorrigepas

Texte

\begin{correction}
\begin{tikzpicture}
\begin{axis}[xlabel=$x$,ylabel={$f(x) = x^2 - x +4$}]
\addplot {x^2 - x +4};
\end{axis}
\end{tikzpicture}
\end{correction}
    
\end{document}