Je ne comprends pas cette erreur de ma commande 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 Pathe ♦♦ |
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} Publiée 18 Mar '20, 16:03 joseph-tux 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
1
Vous pouvez remplacer l'étape 3 par
(20 Mar '20, 15:31)
touhami
|
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} Publiée 21 Mar '20, 17:16 joseph-tux |
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 chaquetcolorbox
).Pourriez-vous poster un ECM qui présente la solution ?