Est-il possible de hiérarchiser les commandes de changement de couleurs, pour que certaines soient prioritaires sur d'autres ?

Par exemple, quand je fais

\documentclass{minimal}
\usepackage{xcolor}
\begin{document}
\def\vert#1{{\color{green}#1}}
\def\rouge#1{{\color{red}#1}}
\rouge{\vert{a}}
\end{document}

j'obtiens un a vert. Mais je voudrais définir \rouge pour être prioritaire sur tous les changements de couleurs suivants. Je voudrais pouvoir écrire

\def\vert#1{{\color[level=1]{green}#1}}
\def\rouge#1{{\color[level=2]{red}#1}}
\rouge{\vert{a}}

donnerait un a rouge, parce que \rouge définit un changement de couleur de niveau plus élevé que \vert.

Posée 02 Jui '22, 14:01

nmarkey's gravatar image

nmarkey
1.4k29
Taux d'acceptation : 45%

Modifiée 03 Jui '22, 15:43

Pathe's gravatar image

Pathe ♦♦
7.5k42204251


Voici une solution.

\documentclass{article

\usepackage{xcolor}
\newcounter{xcolor}
\renewcommand{\thexcolor}{%
    \ifcase\value{xcolor}% 
    black\or %0
    green\or %1
    blue\or %2
    yellow\or %3 
    purple\or %4
    red\fi} %5
\newcommand{\mtvert}{\setcolorvalue{1}}
\newcommand{\mtblue}{\setcolorvalue{2}}
\newcommand{\mtyellow}{\setcolorvalue{3}}
\newcommand{\mtpurple}{\setcolorvalue{4}}
\newcommand{\mtred}{\setcolorvalue{5}}
\newcommand\setcolorvalue[2]{%
    \ifnum\value{xcolor}<#1\relax
    \setcounter{xcolor}{#1}\fi
    {\color{\thexcolor}#2}%
    \setcounter{xcolor}{0}}
\begin{document}
Bonjour le monde

\mtvert{Bonjour le monde}

\mtvert{\mtred{Bonjour le monde} Hello World!}

Bonjour le monde

\mtred{\mtvert{Bonjour le monde}}

\mtblue{\mtvert{Bonjour le monde}}

\mtvert{\mtblue{Bonjour le monde}}

\mtblue{\mtyellow{\mtvert{Bonjour le monde}} Hello World!}

\mtred{\mtblue{Bonjour le monde}}
\end{document}
Lien permanent

Publiée 03 Jui '22, 19:23

touhami's gravatar image

touhami
9.7k410
Taux d'acceptation : 51%

Modifiée 03 Jui '22, 20:12

samcarter's gravatar image

samcarter
8.4k2817

Avec https://tex.stackexchange.com/a/573099/36296 :

\documentclass{minimal}
\usepackage{xcolor}
\begin{document}
\def\vert#1{{\color{green}#1}}
\def\rouge#1{{\color{red}\renewcommand\color[2][]{}#1}}
\rouge{\vert{a}}
\end{document}
Lien permanent

Publiée 02 Jui '22, 14:18

samcarter's gravatar image

samcarter
8.4k2817
Taux d'acceptation : 56%

Modifiée 02 Jui '22, 14:19

1

Merci. J'avais pensé à une solution comme ça ; ça marche bien, mais ça ne permet de définir qu'un seul niveau. Je voudrais généraliser...

(02 Jui '22, 14:29) nmarkey nmarkey's gravatar image
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.