Как работает этот код выделения цветом части строки?

Как работает этот код выделения цветом части строки?

Я использую awesome-cvкласс, который выделяет первые три буквы заголовка раздела следующим образом:

Образование с выделенным "Edu"

Код, создающий этот эффект, выглядит так:

\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}%
}

Размер текста и жирный шрифт будут добавлены позже.

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

Каким образом первая часть этого кода выделяет первые три буквы?


Я понимаю, что это не MWE, но я не смог создать его из файла .cls, и я не думаю, что этот код настолько сложен для того, кто знает, что он видит. Если мне понадобится и MWE, дайте мне знать.

решение1

На самом деле этот трюк довольно прост: Аргументы для обычных команд TeX могут быть либо отдельными токенами (т. е. символами или \controlsequences), либо они могут быть последовательностями токенов, заключенными в фигурные скобки. Например, вот почему в математическом режиме вы можете написать \frac 1 2, \frac{1}{2}или даже \frac1{2}и получить тот же результат.

Поэтому все, что вам нужно сделать, чтобы получить первые три символа слова, это команда с тремя аргументами. Например,

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

позволяет выделить первые три буквы после вызова, например \mycommand hello. loВ этом случае просто не является частью команды.

Чтобы получить привычный синтаксис всего с одним параметром в фигурных скобках, вы можете обернуть эту команду в другую команду:

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

Это позволяет вам писать \myothercommand{hello}.

Вот MWE, демонстрирующий урезанную версию команды с разными цветами:

\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}

цветной вывод

Связанный контент