如何向类文件函数添加 for 循环?

如何向类文件函数添加 for 循环?

我正在使用这个 XeLaTeX班级文件来编写我的简历。其中一项功能是,对于章节标题,它会为前 3 个字母着色:

\section{experience}

这是硬编码为前 3 个字母,我想使其长度可变:

\section{4}{open source}

我修改了\section部分内容如下:

%%%%%%%%%%%%%
% Structure %
%%%%%%%%%%%%%
\RequirePackage{parskip}

\newcounter{colorCounter}
\def\@sectioncolor#1#2#3{%
  {%
    \color{%
      \ifcase\value{colorCounter}%
        blue\or%
        red\or%
        orange\or%
        green\or%
        purple\else%
        headercolor\fi%
    } #1#2#3%
  }%
  \stepcounter{colorCounter}%
}

\renewcommand{\section}[2]{
  \par\vspace{\parskip}
  {%
    \LARGE\headingfont\color{headercolor}%
    \@sectioncolor #1#2%
  }
  \par\vspace{\parskip}
}

\renewcommand{\subsection}[2]{
  \par\vspace{1\parskip}%
  \Large\headingfont\color{headercolor} #2%
  \par\vspace{1.25\parskip}%
}

\pagestyle{empty}

我不确定如何使用 for 循环修改部分并仅为一定数量的字符着色。

答案1

我想提供一个建议expl3

首先,我使用expl3语法来定义一种方法。

问题在于标题里面的空格。color-command:\frigger_sectioncolor:和你的一样;-)

\cs_new_protected:Npn \frigger_sectioncolor:
 {
 \prg_case_int:nnn {  \value{colorCounter}  }
  {
   { 0 } { \color{blue} }
   { 1 } { \color{red} }
   { 2 } { \color{orange} }
   { 3 } { \color{green} }
   { 4 } { \color{purple} }
  }
  {  \color{headercolor} }
 }

如果使用后想要重新开始着色\color{headcolor}可以使用以下定义:

\cs_new_protected:Npn \frigger_sectioncolor:
 {
 \prg_case_int:nnn {  \value{colorCounter}  }
  {
   { 0 } { \color{blue} }
   { 1 } { \color{red} }
   { 2 } { \color{orange} }
   { 3 } { \color{green} }
   { 4 } { \color{purple} }
  }
  {  
    \color{headercolor}
    \int_gset:Nn \c@colorCounter { 0 }
  }
 }

在下一步中,我\section用两个强制参数声明了该命令。

\DeclareDocumentCommand \section { m m }
{
  \par\vspace{\parskip}
  {%
    \LARGE\headingfont\color{headercolor}%
    \int_set:Nn \l_tmpa_int { 0 }
    \tl_set:Nn \l_tmpa_tl { #2 }
    \tl_replace_all:Nnn \l_tmpa_tl { ~ } {\nil}
    \tl_map_inline:Nn  \l_tmpa_tl 
      {
      \str_if_eq:nnTF { ##1 } { \nil }
             {~}
            {
              \int_compare:nNnTF { \l_tmpa_int  } < { #1 } 
                 {
                   \group_begin:
                           \frigger_sectioncolor: ##1 
                   \group_end:
                 }
                {
                   ##1 
                }
              }
           \int_gincr:N  \l_tmpa_int 
       }
    \int_gincr:N \c@colorCounter
  }
  \par\vspace{\parskip}
}

这一步对于使用时处理间距是必要的\tl_map_inline:Nn

\tl_set:Nn \l_tmpa_tl { #2 }
\tl_replace_all:Nnn \l_tmpa_tl { ~ } {\nil}

完整的 MWE 和结果:

在此处输入图片描述

\documentclass{frigger-cv}
\usepackage{kantlipsum}
\usepackage{xparse,expl3}
\makeatletter
\ExplSyntaxOn
\cs_new_protected:Npn \frigger_sectioncolor:
 {
 \prg_case_int:nnn {  \value{colorCounter}  }
  {
   { 0 } { \color{blue} }
   { 1 } { \color{red} }
   { 2 } { \color{orange} }
   { 3 } { \color{green} }
   { 4 } { \color{purple} }
  }
  {  \color{headercolor} }
 }

\DeclareDocumentCommand \section { m m }
{
  \par\vspace{\parskip}
  {%
    \LARGE\headingfont\color{headercolor}%
    \int_set:Nn \l_tmpa_int { 0 }
    \tl_set:Nn \l_tmpa_tl { #2 }
    \tl_replace_all:Nnn \l_tmpa_tl { ~ } {\nil}
    \tl_map_inline:Nn  \l_tmpa_tl 
      {
      \str_if_eq:nnTF { ##1 } { \nil }
             {~}
            {
              \int_compare:nNnTF { \l_tmpa_int  } < { #1 } 
                 {
                   \group_begin:
                           \frigger_sectioncolor: ##1 
                   \group_end:
                 }
                {
                   ##1 
                }
              }
           \int_gincr:N  \l_tmpa_int 
       }
    \int_gincr:N \c@colorCounter
  }
  \par\vspace{\parskip}
}
\ExplSyntaxOff
\makeatother


\begin{document}
\section{6}{open source}

\section{3}{The Title}

\section{2}{open source}

\section{5}{The Title}


\kant[1]
\end{document}

相关内容