% !TeX TXS-program:compile = txs:///pdflatex
\documentclass[12pt]{article}
\usepackage{couleurs-fr}
\usepackage{codehigh}
\setlength\parindent{0pt}
\ExplSyntaxOn
\NewDocumentCommand \gencontrastcoul { m O{ couleurtexte } }
{
% 1/ Extraction du modèle et des specs brutes
\extractcolorspecs{#1}{\l__cc_model_tl}{\l__cc_specs_tl}
% 2/ Conversion en RGB
\convertcolorspec{\l__cc_model_tl}{\l__cc_specs_tl}{rgb}{\l__cc_rgb_tl}
% 3/ Découpage de la chaîne RGB
\seq_set_split:NnV \l__cc_rgb_seq {,} \l__cc_rgb_tl
% 4/ Affectation des fp
\fp_set:Nn \l__cc_R_fp { \seq_item:Nn \l__cc_rgb_seq {1} }
\fp_set:Nn \l__cc_G_fp { \seq_item:Nn \l__cc_rgb_seq {2} }
\fp_set:Nn \l__cc_B_fp { \seq_item:Nn \l__cc_rgb_seq {3} }
% 5/ Calcul de la luminance
\fp_set:Nn \l__cc_lum_fp
{ 0.299 * \l__cc_R_fp + 0.587 * \l__cc_G_fp + 0.114 * \l__cc_B_fp }
% 6/ Décision
\fp_compare:nTF { \l__cc_lum_fp > 0.5 }
{
\colorlet{#2}{black}
}
{
\colorlet{#2}{white}
}
}
\NewDocumentCommand \textecolore { m m }
{
% 1) Extraction du modèle et des specs brutes
\extractcolorspecs{#1}{\l__cc_model_tl}{\l__cc_specs_tl}
% 2) Conversion en RGB
\convertcolorspec{\l__cc_model_tl}{\l__cc_specs_tl}{rgb}{\l__cc_rgb_tl}
% 3) Découpage de la chaîne RGB
\seq_set_split:NnV \l__cc_rgb_seq {,} \l__cc_rgb_tl
% 4) Affectation des fp
\fp_set:Nn \l__cc_R_fp { \seq_item:Nn \l__cc_rgb_seq {1} }
\fp_set:Nn \l__cc_G_fp { \seq_item:Nn \l__cc_rgb_seq {2} }
\fp_set:Nn \l__cc_B_fp { \seq_item:Nn \l__cc_rgb_seq {3} }
% 5) Calcul de la luminance
\fp_set:Nn \l__cc_lum_fp
{ 0.299 * \l__cc_R_fp + 0.587 * \l__cc_G_fp + 0.114 * \l__cc_B_fp }
% 6) Décision
\fp_compare:nTF { \l__cc_lum_fp > 0.5 }
{
\colorlet{contrastcolor}{black}
}
{
\colorlet{contrastcolor}{white}
}
% Résultat visuel
\colorbox{#1}{\textcolor{contrastcolor}{#2}}
}
\ExplSyntaxOff
\begin{document}
Adaptation de la couleur du texte à la couleur du fond
\begin{demohigh}[language=latex/latex2]
\textecolore{yellow}{Texte sur yellow}\\
\textecolore{blue}{Texte sur blue}\\
\textecolore{red!50!black}{Texte sur red!50!black}\\
\textecolore{violet}{Texte sur violet}\\
\textecolore{pink}{Texte sur pink}\\
\textecolore{teal}{Texte sur teal}\\
\textecolore{Abricot}{Texte sur Abricot}\\
\textecolore{Cacao}{Texte sur Cacao}\\
\textecolore{CitronVertFonce}{Texte sur CitronVertFonce}
\end{demohigh}
\end{document}