Je ne comprends pas cette erreur de ma commande \ifthenelse{\equal} qui ne fonctionne pas ici :

Ouvrir dans l'éditeur Overleaf
\documentclass[french,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}      % accents dans le source
\usepackage[T1]{fontenc}         % accents dans le pdf
\usepackage{ifthen}
\usepackage{tcolorbox}
\usepackage[french]{babel}      % titres et typo en français
\begin{document}

% BUG
\makeatletter
\newcommand{\titredesection}{\@currentheadentry}
\makeatother

% Si la section est «foo»
\ifthenelse{\equal{foo}{\titredesection}}%
    % alors le titre des tcolorbox est «bar»
{\tcbset{title=bar}}%
% Sinon, c'est foo:
{\tcbset{title=foo}}% BUG, imprime toujours «bar»

\section{foo}
\begin{tcolorbox}
  Ici c'est une citation de bar.

  Le titre de cette box devrait être bar. 
\end{tcolorbox}

\section{bar}
\begin{tcolorbox}
  Ici c'est une citation de foo.

  Le titre de cette box devrait être foo. 
\end{tcolorbox}
\end{document}

Posée 18 Mar '20, 15:27

joseph-tux's gravatar image

joseph-tux
42722450
Taux d'acceptation : 4%

Modifiée 23 Mar '20, 21:45

Pathe's gravatar image

Pathe ♦♦
7.4k28196245

3

Il n'y a pas d'erreur (au sens où ça compile correctement).

Les deux boites ont le même titre parce que, à l'endroit où vous exécutez la commande \ifthenelse, aucun titre de section n'a été défini, donc le test est faux. Et ce test n'est effectué qu'une fois, là où vous l'avez écrit.

Pour que ça fasse ce que vous voulez, il faut définir une commande qui fasse votre test ifthenelse et définisse le titre en fonction, et appeler cette commande au début de chaque \section (ou avant chaque tcolorbox).

(18 Mar '20, 15:45) nmarkey nmarkey's gravatar image

Pourriez-vous poster un ECM qui présente la solution ?

(18 Mar '20, 16:00) Pathe ♦♦ Pathe's gravatar image

Solution (application du commentaire de nmarkey)

Ouvrir dans l'éditeur Overleaf
\documentclass[french,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}      % accents dans le source
\usepackage[T1]{fontenc}         % accents dans le pdf
\usepackage{ifthen}
\usepackage{tcolorbox}
\usepackage[french]{babel}      % titres et typo en français
\begin{document}

% 1 Extraire le titre de section:
\makeatletter
\newcommand{\titredesection}{\@currentheadentry}
\makeatother

% 2 Utiliser le titre comme condition:
\newcommand{\titretcb}{%
% Si la subsubsection est «foo», le titre est «bar»:
\ifthenelse{\equal{foo}{\titredesection}}%
{\tcbset{title=bar}}%
% sinon le titre des tcolorbox est «foo»:
{\tcbset{title=foo}}
}

% 3 Intégrer la condition à chaque appel de section - (erreur)
%-\newcommand\sectionif[2][]{\section[#1]{#2}\titretcb}

\section{foo}
\titretcb
\begin{tcolorbox}
  Ici c'est une citation de bar.

  Le titre de cette box devrait être bar. 
\end{tcolorbox}

\section{bar}
\titretcb
\begin{tcolorbox}
  Ici c'est une citation de foo.

  Le titre de cette box devrait être foo. 
\end{tcolorbox}
\end{document}
Lien permanent

Publiée 18 Mar '20, 16:03

joseph-tux's gravatar image

joseph-tux
42722450
Taux d'acceptation : 4%

Modifiée 21 Mar '20, 16:53

Désolé, j'ignore pourquoi, mais ça ne compile pas (à partir de (3), avec \newcommand). Je dois corriger cette solution (fait).

(20 Mar '20, 13:21) joseph-tux joseph-tux's gravatar image
1

Vous pouvez remplacer l'étape 3 par \AddtoDoHook{heading/endgroup/section}{\aftergroup\titretcb}.

(20 Mar '20, 15:31) touhami touhami's gravatar image

Et en plus, la solution de Touhami:

Ouvrir dans l'éditeur Overleaf
\documentclass[french,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}      % accents dans le source
\usepackage[T1]{fontenc}         % accents dans le pdf
\usepackage{ifthen}
\usepackage{tcolorbox}
\usepackage[french]{babel}      % titres et typo en français
\begin{document}
% 1 Extraire le titre de section:
\makeatletter
\newcommand{\titredesection}{\@currentheadentry}
\makeatother
% 2 Utiliser le titre comme condition:
\newcommand{\titretcb}{%
% Si la subsubsection est «foo», le titre est «bar»:
\ifthenelse{\equal{foo}{\titredesection}}%
{\tcbset{title=bar}}%
% sinon le titre des tcolorbox est «foo»:
{\tcbset{title=foo}}
}
% 3 Intégrer la condition à chaque appel de section:
\AddtoDoHook{heading/endgroup/section}{\aftergroup\titretcb}
\section{foo}
\begin{tcolorbox}
  Ici c'est une citation de bar.

 Le titre de cette box devrait être bar.
\end{tcolorbox}
\section{bar}
\begin{tcolorbox}
  Ici c'est une citation de foo.

  Le titre de cette box devrait être foo. 
\end{tcolorbox}
\end{document}
Lien permanent

Publiée 21 Mar '20, 17:16

joseph-tux's gravatar image

joseph-tux
42722450
Taux d'acceptation : 4%

Modifiée 22 Mar '20, 16:40

Votre réponse
(dés)activer l'aperçu

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Bases de Markdown

  • *italique* ou _italique_
  • **gras** ou __gras__
  • Lien ::[texte](http://url.com/ "Titre ")
  • Image : ?![alt texte](/path/img.jpg "Titre ")
  • Liste numérotée : 1. Foo 2. Bar
  • Pour ajouter un passage à la ligne, ajoutez deux espaces à l'endroit où vous souhaitez que la ligne commence.
  • Les balises HTML de base sont également prises en charge.