Como funciona esse código de realce de cores de string parcial?

Como funciona esse código de realce de cores de string parcial?

Estou usando a awesome-cvclasse, que destaca as três primeiras letras do título da seção assim:

Educação com “Edu” em destaque

O código que produz esse efeito fica assim:

\RequirePackage{xcolor}
\RequirePackage{xifthen}
\RequirePackage{etoolbox}
\RequirePackage[quiet]{fontspec}
\RequirePackage{fontawesome}

\definecolor{awesome-red}{HTML}{DC3522}
\colorlet{awesome}{awesome-red}

\newcounter{colorCounter}
\def\@sectioncolor#1#2#3{%
  {%
    \color{%
      \ifcase\value{colorCounter}%
        awesome\or%
        awesome\or%
        awesome\or%
        awesome\or%
        awesome\else%
        awesome\fi%
    } #1#2#3%
  }%
  \stepcounter{colorCounter}%
}

O tamanho do texto e o negrito são adicionados posteriormente em

\newcommand*{\sectionstyle}[1]{{\fontsize{15pt}{1em}\bodyfont\bfseries\color{text}\@sectioncolor #1}}

Como a primeira parte deste código destaca as três primeiras letras?


Entendo que este não é um MWE, mas não consegui criar um a partir do .clsarquivo e não acho que esse código seja tão complexo para alguém que sabe o que está vendo. Se eu precisar e MWE, me avise.

Responder1

Na verdade, esse truque é bastante simples: argumentos para comandos normais do TeX podem ser tokens únicos (ou seja, caracteres ou \controlsequences) ou podem ser sequências de tokens entre colchetes. Por exemplo, é por isso que, no modo matemático, você pode escrever \frac 1 2, \frac{1}{2}ou até mesmo \frac1{2}e obter o mesmo resultado.

Portanto, tudo o que você precisa fazer para obter os três primeiros caracteres de uma palavra é um comando com três argumentos. Por exemplo,

\newcommand\mycommand[3]{%
    \textcolor{red}{#1}%
    \textcolor{green}{#2}%
    \textcolor{blue}{#3}%
}

permite destacar as três primeiras letras após uma invocação como \mycommand hello. Neste locaso, simplesmente não faz parte do comando.

Para obter a sintaxe familiar com apenas um parâmetro entre colchetes, você pode agrupar este comando em outro comando:

\newcommand*\myothercommand[1]{%
    \mycommand #1%
}

Isso permite que você escreva \myothercommand{hello}.

Aqui está um MWE que demonstra uma versão simplificada do comando com cores diferentes:

\documentclass{article}
\RequirePackage{xcolor}
\RequirePackage{xifthen}

\definecolor{awesome-red}{HTML}{DC3522}
\colorlet{awesome}{awesome-red}

\newcounter{colorCounter}
\newcommand\sectioncolor[3]{%
  {%
    \color{%
      \ifcase\value{colorCounter}%
        awesome\or%
        green\or%
        blue\or%
        orange\or%
        yellow\else%
        cyan\fi%
    } #1#2#3%
  }%
  \stepcounter{colorCounter}%
}

\newcommand*{\sectionstyle}[1]{{\fontsize{15pt}{1em}\bfseries\sectioncolor #1}}

\begin{document}
    \sectionstyle{first}\par
    \sectionstyle{second}\par
    \sectionstyle{third}\par
    \sectionstyle{fourth}\par
    \sectionstyle{fifth}\par
    \sectionstyle{sixth}\par
    \sectionstyle{seventh}
\end{document}

saída colorida

informação relacionada