Compilateur LaTeX en ligne
www.cpierquet.fr
fichiers/c.pierquet/contrastcolor.tex
↓ télécharger
% !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}