Comment écrire un mot de deux couleurs différentes?

Aug 17 2020

J'ai un mot et j'aimerais l'écrire en deux couleurs différentes. Habituellement, il y aura un espace entre les deux \textcolosections

\textcolor{sectcol}{la}\textcolor{white}{tex}

Je peux "supprimer" l'espace avec un négatif \hspace.

\textcolor{sectcol}{la}\hspace{-1mm}\textcolor{white}{tex}

Y a-t-il une meilleure manière de faire cela?

Réponses

3 UlrikeFischer Aug 17 2020 at 16:54

les inserts de couleur soi-disant whatits, et cela empêchera le crénage:

\documentclass{article}
\usepackage{color}

\begin{document}
VA

\textcolor{red}{V}\textcolor{blue}{A}
\end{document}

Vous ne pouvez pas faire grand-chose à ce sujet (à part insérer un espace négatif). Le seul moyen de l'éviter vraiment est d'utiliser le moteur lualatex et le package luacolor:

\documentclass{article}
\usepackage{luacolor}

\begin{document}
VA

\textcolor{red}{V}\textcolor{blue}{A}
\end{document}

2 egreg Aug 17 2020 at 17:13

Votre exemple n'est pas bon, car il n'y a pas de crénage entre «a» et «t» dans les polices standard.

Si vous êtes bloqué pdflatexet que vous ne pouvez pas utiliser LuaTeX, vous pouvez calculer manuellement le crénage nécessaire.

\documentclass{article}
\usepackage{xcolor,xparse}

\ExplSyntaxOn

\NewDocumentCommand{\twocolors}{mmmm}
 {% #1 = color for the first part
  % #2 = first part
  % #3 = color for the second part
  % #4 = second part
  \egreg_twocolors:nnnn { #1 } { #2 } { #3 } { #4 }
 }

\box_new:N \l__egreg_twocolors_kern_box
\box_new:N \l__egreg_twocolors_nokern_box

\cs_new_protected:Nn \egreg_twocolors:nnnn
 {
  \hbox_set:Nn \l__egreg_twocolors_kern_box
   {
    \tl_item:nn { #2 } { -1 }
    \tl_item:nn { #4 } { 1 } % could just be \tl_head:n
   }
  \hbox_set:Nn \l__egreg_twocolors_nokern_box
   {
    \hbox:n { \tl_item:nn { #2 } { -1 } }
    \hbox:n { \tl_item:nn { #4 } { 1 } } % could just be \tl_head:n
   }
  \textcolor{#1}{#2}
  \skip_horizontal:n
   {
    \box_wd:N \l__egreg_twocolors_kern_box - \box_wd:N \l__egreg_twocolors_nokern_box
   }
  \textcolor{#3}{#4}
 }

\ExplSyntaxOff

\begin{document}

\twocolors{green!50!blue}{two}{red!30}{color}

twocolor

\makebox[0pt][l]{twocolor}\twocolors{green!50!blue}{two}{red!30}{color}
\makebox[0pt][l]{\twocolors{green!50!blue}{two}{red!30}{color}}twocolor

\twocolors{green!50!blue}{la}{red!30}{tex}

latex

\makebox[0pt][l]{latex}\twocolors{green!50!blue}{la}{red!30}{tex}
\makebox[0pt][l]{\twocolors{green!50!blue}{la}{red!30}{tex}}latex

\twocolors{green!50!blue}{V}{red!30}{A}

VA

\makebox[0pt][l]{VA}\twocolors{green!50!blue}{V}{red!30}{A}
\makebox[0pt][l]{\twocolors{green!50!blue}{V}{red!30}{A}}VA

\end{document}

Chaque exemple vérifie que les couleurs ne fuient pas. Cependant, à de petites résolutions, le rasterer peut afficher des artefacts. L'image ci-dessous a été prise à une résolution assez élevée.

Limitation: si le dernier élément de la première partie ou le premier élément de la seconde partie est une lettre accentuée, accollez-la (ou les).