我正在寻找类似的东西这,其中可以将一串文本放入一个命令中,该命令可以在颜色之间交替显示文本(最好是三种),但颜色是每个单词的。
例如, \alternatecolors{blah blah blah} 将产生三个 blah,第一个是红色,第二个是绿色,第三个是蓝色;如果有更多,则重复从红色→绿色→蓝色等。
我目前正在使用简单的解决方案,即单独为每个单词着色,但我有很多这样的例子,并且正在重写整个文档:),所以在我重写更多内容之前,我很想知道这是否真的可行。
谢谢你!
答案1
欢迎光临!您只需要xcolor
。
\documentclass{article}
\usepackage{xcolor}
\makeatletter
\def\alternatecolors#1{\colorlet{oldcolor}{.}\my@color%
\@alternatecolors#1 \@empty
\color{oldcolor}
}
\def\@alternatecolors#1 #2{%
#1\my@color\space
\ifx #2\@empty\else
\expandafter\@alternatecolors
\fi
#2%
}
\newcounter{pft@col}
\newcommand{\my@color}{\ifcase\value{pft@col}%
\color{red}%
\stepcounter{pft@col}%
\or
\color{green}%
\stepcounter{pft@col}%
\or
\color{blue}%
\setcounter{pft@col}{0}%
\fi}
\newcommand{\ResetColor}{\setcounter{pft@col}{0}%
}
\makeatother
\begin{document}
\alternatecolors{blah blah blah} : %
\alternatecolors{blah blub pft pfft} : %
\alternatecolors{blah blub pft pfft} : %
\alternatecolors{blah blub pft pfft} : %
\alternatecolors{blah blub pft pfft} : \ResetColor%
\alternatecolors{blah blub pft pfft}
\end{document}
颜色循环会继续,除非使用 重置它\ResetColor
。当然,如果需要,也可以默认重置它。
原始答案:你可以soul
这样xcolor
做
\documentclass{article}
\usepackage{soul}
\usepackage{xcolor}
\makeatletter
\DeclareRobustCommand*{\alternatecolors}{%
\SOUL@setup
\def\SOUL@preamble{\colorlet{oldcolor}{.}\my@color}%
\def\SOUL@postamble{\color{oldcolor}}%
\def\SOUL@everyspace##1{##1\my@color\space}%
\def\SOUL@everytoken{\the\SOUL@token}%
\SOUL@
}
\newcounter{pft@col}
\newcommand{\my@color}{\ifcase\value{pft@col}%
\color{red}%
\stepcounter{pft@col}%
\or
\color{green}%
\stepcounter{pft@col}%
\or
\color{blue}%
\setcounter{pft@col}{0}%
\fi}
\newcommand{\ResetColor}{\setcounter{pft@col}{0}%
}
\makeatother
\begin{document}
\alternatecolors{blah blah blah} : %
\alternatecolors{blah blub pft pfft} : %
\alternatecolors{blah blub pft pfft} : %
\alternatecolors{blah blub pft pfft} : %
\alternatecolors{blah blub pft pfft} : \ResetColor%
\alternatecolors{blah blub pft pfft}
\end{document}