我正在尝试标记段落中的句子,以便每个句子按顺序获得不同的颜色。我不想手动指定颜色,而是想简单地注释单个句子,然后让 Latex 负责分配颜色。
以下是 MWE:
\documentclass[12pt]{article}
\usepackage{xcolor}
\colorlet{colorA}{red}
\colorlet{colorB}{blue}
\newcommand{\altcolorA}[1]{{\renewcommand{\altcolor}[1]{\altColorB{#1}}}\color{colorA}#1}
\newcommand{\altcolorB}[1]{{\renewcommand{\altcolor}[1]{\altColorA{#1}}}\color{colorB}#1}
\newcommand{\altcolor}[1]{\altcolorA{#1}}
\begin{document}
I want:
{\color{red}one} {\color{blue}two}
{\color{red} three}
But I get:
\altcolor{one}
\altcolor{two}
\altcolor{three}
\end{document}
结果:
答案1
按顺序存储颜色并使用模块化算法:每次使用\altcolor
计数器时都会进行步进。
该列表遵循标准作用域规则。\altcolor*
提供了一种将计数器重置为零的变体。
\documentclass{article}
\usepackage{xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\makecolorlist}{m}
{% #1 = color list
\seq_set_split:Nnn \l_myron_colorlist_seq { , } { #1 }
}
\NewDocumentCommand{\altcolor}{sm}
{% #1 = optional * for resetting, #2 = text to be colored
\IfBooleanT { #1 } { \int_zero:N \l_myron_colorlist_int }
\textcolor
{% choose the color
\seq_item:Nn \l_myron_colorlist_seq
{
\int_mod:nn { \l_myron_colorlist_int } { \seq_count:N \l_myron_colorlist_seq } + 1
}
}
{
#2
}
\int_incr:N \l_myron_colorlist_int
}
\int_new:N \l_myron_colorlist_int
\seq_new:N \l_myron_colorlist_seq
\ExplSyntaxOff
\colorlet{colorA}{red}
\colorlet{colorB}{blue}
\makecolorlist{colorA,colorB}
\begin{document}
I want:
{\color{red}one} {\color{blue}two}
{\color{red} three}
And I get:
\altcolor{one}
\altcolor{two}
\altcolor{three}
Again:
\altcolor*{one}
\altcolor{two}
\altcolor{three}
\makecolorlist{colorA,colorB,green!70!red}
\altcolor*{Test} \altcolor{with} \altcolor{three} \altcolor{colors}
\end{document}
答案2
由于您只在两种颜色之间切换,因此可以使用条件\if...
:
\documentclass{article}
\usepackage{xcolor}
\colorlet{colorA}{red}
\colorlet{colorB}{blue}
\newif\ifcolorA
\colorAtrue% Start with colorA
\newcommand{\altcolor}[1]{%
\ifcolorA
\textcolor{colorA}{#1}%
\colorAfalse
\else
\textcolor{colorB}{#1}%
\colorAtrue
\fi
}
\begin{document}
I want:
{\color{red}one} {\color{blue}two}
{\color{red} three}
And I get:
\altcolor{one}
\altcolor{two}
\altcolor{three}
\end{document}