[tcolorbox] ifnovalueTF

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.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 525
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

[Résolu] [tcolorbox] ifnovalueTF

Message non lu par zariski63 »

Bonjour !

Pour faire suite à un autre post qui n'aura pas eu de succès, j'ai cherché un autre moyen de réaliser un environnement acceptant les listings avec tcolorbox + une image.
Malheureusement je bute sur un truc...
Comment faire comprendre à mon environnement qu'il n'y a pas d'image éventuellement ?
J'ai essayé avec IfNoValue mais ça ne fonctionne pas...

Je joins un ecm et l'image (n'importe quelle image peut convenir cependant).
Merci.

Code : Tout sélectionner

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{xcolor}
\usepackage{tcolorbox}
    \tcbuselibrary{listings}
    \tcbuselibrary{breakable}
    \tcbuselibrary{skins}
    \tcbuselibrary{xparse}

\lstdefinestyle{latex}{%
   language          = [LaTeX]TeX,
   basicstyle        = {\ttfamily\fontseries{b}\fontsize{10}{12.5}\selectfont},
   extendedchars=true,
   escapechar        = {§},
   columns           = fullflexible,
   keepspaces        = true,
   tabsize=2,
   upquote           = true,
   breaklines        = true,
   breakindent       = 0cm,
   numbers           = left,
   numbersep         = 2.5ex,
   numberstyle       = {\fontfamily{lmtt}\fontseries{b}\tiny\selectfont},
   morecomment       = [l]\%,
   commentstyle      = {\color{gray}},
   texcsstyle        = *{\color{blue}},
   }


\newsavebox\mysavebox

\DeclareTCBListing{listingbis}{  O{} O{} O{} }{%
    IfNoValueTF = {#3}{
         enhanced,%
         overlay         = {\begin{tcbclipinterior}%
                               \fill[orange!12] (frame.south west) rectangle
                                ([xshift=3ex]%largeur du bandeau vertical
                                frame.north west);
                              \end{tcbclipinterior}},%
         listing options  = {#1},
         #2}
      {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       comment outside listing,
       code           = {\sbox{\mysavebox}{\includegraphics{#3}}},
       lefthand width = \wd\mysavebox,
       image comment  = {width=\wd\mysavebox}{#3},
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       enhanced,%
       overlay         = {\begin{tcbclipinterior}%
                          \fill[orange!12] (frame.south west) rectangle
                          ([xshift=3ex]%largeur du bandeau vertical
                          frame.north west);
                        \end{tcbclipinterior}},%
       listing options  = {#1},
       #2}
    }

\begin{document}

\begin{listingbis}[style=latex][colback=red!12][bezier.pdf]
\bfseries
\end{listingbis}


\begin{listingbis}[style=latex][colback=red!12][]
\bfseries
\end{listingbis}

\end{document} 
Pièces jointes
bezier.pdf
(2.46 Kio) Téléchargé 214 fois
gigiair
Utilisateur chevronné
Utilisateur chevronné
Messages : 2804
Inscription : samedi 08 juillet 2006, 20:56
Localisation : Saint Bonnet Elvert

Re: [tcolorbox] ifnovalueTF

Message non lu par gigiair »

Tester si un fichier existe dans l'environnement, il paraît que ce n'est pas trivial mai ça me paraît une solution possible.
Une autre solution consisterait à créer un fichier image n'affichant rien

Code : Tout sélectionner

\begin{document}

\begin{listingbis}[style=latex][colback=red!12][bezier]
\bfseries 
\end{listingbis}


 \begin{listingbis}[style=latex][colback=red!12][bidon]
 \bfseries 
 \end{listingbis}

\end{document} 

mthmtx.png
mthmtx.png (4.64 Kio) Consulté 846 fois
JJR.
LaTeXien migrateur.
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 488
Inscription : dimanche 11 février 2007, 11:45

Re: [tcolorbox] ifnovalueTF

Message non lu par touhami »

Bonjour.
Vous devez
  • Déclarer la boite avec un argument optionnel de type petit o (o minuscule), sans les accolades.

    Code : Tout sélectionner

    \DeclareTCBListing{listingbis}{  O{} O{} o }{%
        IfNoValueTF ={#3}{...
  • Ne pas utiliser le troisième argument, sinon il existe malgré vide

    Code : Tout sélectionner

    \begin{listingbis}[style=latex][colback=red!12]
    \bfseries
    \end{listingbis}
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 525
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: [tcolorbox] ifnovalueTF

Message non lu par zariski63 »

Merci pour vos réponses.
Pour la dernière solution cela ne fonctionne pas...
Il semblerait que cela "avale" le début du listing lorsqu'il n'y a pas d'image à insérer.
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 488
Inscription : dimanche 11 février 2007, 11:45

Re: [tcolorbox] ifnovalueTF

Message non lu par touhami »

Bonjour.

Voici un ECM.

Code : Tout sélectionner

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{xcolor}
\usepackage{tcolorbox}
    \tcbuselibrary{listings}
    \tcbuselibrary{breakable}
    \tcbuselibrary{skins}
    \tcbuselibrary{xparse}

\lstdefinestyle{latex}{%
   language          = [LaTeX]TeX,
   basicstyle        = {\ttfamily\fontseries{b}\fontsize{10}{12.5}\selectfont},
   extendedchars=true,
   escapechar        = {§},
   columns           = fullflexible,
   keepspaces        = true,
   tabsize=2,
   upquote           = true,
   breaklines        = true,
   breakindent       = 0cm,
   numbers           = left,
   numbersep         = 2.5ex,
   numberstyle       = {\fontfamily{lmtt}\fontseries{b}\tiny\selectfont},
   morecomment       = [l]\%,
   commentstyle      = {\color{gray}},
   texcsstyle        = *{\color{blue}},
   }

\newsavebox\mysavebox

\DeclareTCBListing{listingbis}{  O{} O{} o }{%
    IfNoValueTF = {#3}{
         enhanced,%
         overlay         = {\begin{tcbclipinterior}%
                               \fill[orange!12] (frame.south west) rectangle
                                ([xshift=3ex]%largeur du bandeau vertical
                                frame.north west);
                              \end{tcbclipinterior}},%
         listing options  = {#1},
         #2}
      {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       comment outside listing,
       code           = {\sbox{\mysavebox}{\includegraphics{#3}}},
       lefthand width = \wd\mysavebox,
       image comment  = {width=\wd\mysavebox}{#3},
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       enhanced,%
       overlay         = {\begin{tcbclipinterior}%
                          \fill[orange!12] (frame.south west) rectangle
                          ([xshift=3ex]%largeur du bandeau vertical
                          frame.north west);
                        \end{tcbclipinterior}},%
       listing options  = {#1},
       #2}
    }

\begin{document}

\begin{listingbis}[style=latex][colback=red!12][bezier.pdf]
\bfseries
\end{listingbis}

\begin{listingbis}[style=latex][colback=red!12]
\bfseries
\end{listingbis}

\end{document} 
Pièces jointes
ECM.pdf
(24.59 Kio) Téléchargé 198 fois
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 525
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: [tcolorbox] ifnovalueTF

Message non lu par zariski63 »

Le \bfseries n’apparaît pas sur le deuxième exemple.
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 525
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: [tcolorbox] ifnovalueTF

Message non lu par zariski63 »

En fait il faut mettre "[ ]" si pas d'image ....
Là je crois que ça marche.
touhami
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 488
Inscription : dimanche 11 février 2007, 11:45

Re: [tcolorbox] ifnovalueTF

Message non lu par touhami »

OK. Je vois maintenant le problème et c'est expliqué à la page 462 de la doc : il faut utiliser l'argument !o.
Voici donc un ECM.

Code : Tout sélectionner

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{xcolor}
\usepackage{tcolorbox}
    \tcbuselibrary{listings}
    \tcbuselibrary{breakable}
    \tcbuselibrary{skins}
    \tcbuselibrary{xparse}

\lstdefinestyle{latex}{%
   language          = [LaTeX]TeX,
   basicstyle        = {\ttfamily\fontseries{b}\fontsize{10}{12.5}\selectfont},
   extendedchars=true,
   escapechar        = {§},
   columns           = fullflexible,
   keepspaces        = true,
   tabsize=2,
   upquote           = true,
   breaklines        = true,
   breakindent       = 0cm,
   numbers           = left,
   numbersep         = 2.5ex,
   numberstyle       = {\fontfamily{lmtt}\fontseries{b}\tiny\selectfont},
   morecomment       = [l]\%,
   commentstyle      = {\color{gray}},
   texcsstyle        = *{\color{blue}},
   }


\newsavebox\mysavebox

\DeclareTCBListing{listingbis}{  O{} O{} !o }{%
    IfNoValueTF = {#3}{
         enhanced,%
         overlay         = {\begin{tcbclipinterior}%
                               \fill[orange!12] (frame.south west) rectangle
                                ([xshift=3ex]%largeur du bandeau vertical
                                frame.north west);
                              \end{tcbclipinterior}},%
         listing options  = {#1},
         #2}
      {%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       comment outside listing,
       code           = {\sbox{\mysavebox}{\includegraphics{#3}}},
       lefthand width = \wd\mysavebox,
       image comment  = {width=\wd\mysavebox}{#3},
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
       enhanced,%
       overlay         = {\begin{tcbclipinterior}%
                          \fill[orange!12] (frame.south west) rectangle
                          ([xshift=3ex]%largeur du bandeau vertical
                          frame.north west);
                        \end{tcbclipinterior}},%
       listing options  = {#1},
       #2}
    }


\begin{document}

\begin{listingbis}[style=latex][colback=red!12][bezier.pdf]
\bfseries
\end{listingbis}


\begin{listingbis}[style=latex][colback=red!12]
\bfseries 
\end{listingbis}

\end{document}
Pièces jointes
ECM.png
zariski63
Utilisateur éprouvé
Utilisateur éprouvé
Messages : 525
Inscription : jeudi 14 octobre 2010, 09:20
Statut actuel : Enseignant
Localisation : Clermont-Ferrand

Re: [tcolorbox] ifnovalueTF

Message non lu par zariski63 »

En un seul mot GENIAL !
Je vous remercie encore pour avoir pris le temps de me renseigner, sympa !
Bon weekend.
E.C.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message