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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Posée 18 Mar '20, 15:27

joseph-tux's gravatar image

joseph-tux
54123565
Taux d'acceptation : 5%

Modifiée 23 Mar '20, 21:45

Pathe's gravatar image

Pathe ♦♦
7.6k49210252

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}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lien permanent

Publiée 18 Mar '20, 16:03

joseph-tux's gravatar image

joseph-tux
54123565
Taux d'acceptation : 5%

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}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lien permanent

Publiée 21 Mar '20, 17:16

joseph-tux's gravatar image

joseph-tux
54123565
Taux d'acceptation : 5%

Modifiée 22 Mar '20, 16:40

Votre réponse
[Masquer 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

Mots-clés de la question :

×3
×2

Question posée : 18 Mar '20, 15:27

Question vue : 6,158 fois

Dernière mise à jour : 23 Mar '20, 15:30

C'est votre première visite ici ? Consultez la FAQ !

×