我正在使用这个 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}