一串文本中每个单词的颜色交替变化

一串文本中每个单词的颜色交替变化

我正在寻找类似的东西,其中可以将一串文本放入一个命令中,该命令可以在颜色之间交替显示文本(最好是三种),但颜色是每个单词的。

例如, \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}

相关内容