更改整个文档中所有出现的特定字符的颜色

更改整个文档中所有出现的特定字符的颜色

是否可以改变整个文档中某个特定字符的所有出现的颜色?

链接提供了改变“单词”颜色的解决方案,但我正在寻找改变“字符”颜色的解决方案。

注意:字符可以位于单词内,也可以位于单词之外。

答案1

在这里,我扩展了我的答案突出显示单词列表中的每个出现?解决整个单词和单个字母的突出显示问题。

首先,我们有一个宏\onlywords(默认T),它告诉宏\colorize{}只对整个单词进行操作(这意味着foo不会被着色为单词 的一部分xfoox)。如果\onlywords设置为F,那么对 的搜索foo将被着色为 的一部分xfoox

搜索字母/字符串或单词用 设定\setcolor{<string>}{<color>}

可以通过调用 来重置搜索字符串\resetcolorize

我应该指出,大写字母不会妨碍字符串搜索,因此Baz标记为正匹配baz。此外,对于整个单词搜索,标点符号会被筛选掉,因此xfoox在搜索整个单词时不会标记while foo(foo)另一方面,meta-foo将正确定位为一个foo单词。

在下面的 MWE 中,在第一段中,我只搜索整个单词

\setcolor{foo}{red}
\setcolor{bar}{blue!70}
\setcolor{baz}{cyan}
\setcolor{biz}{green!70!black}

而在第二段中,我搜索单词内的字母

\setcolor{a}{red}
\setcolor{e}{orange!90!black}
\setcolor{i}{cyan}
\setcolor{o}{green!85!black}
\setcolor{u}{blue!20!blue}

以下是 MWE:

\documentclass{article}
\usepackage{listofitems,xcolor}
\def\onlywords{T}
\def\onlywordstrue{T}
\newcounter{colorwords}
\newcommand\colorize[1]{%
  \expandafter\setsepchar\expandafter{\theparselist/ /,||.||!||?||;||:||-||(||)||[||]}%
  \reademptyitems%
  \greadlist\thewords{#1}%
  \foreachitem\x\in\thewords[]{%
    \x%
    \ifnum\xcnt<\listlen\thewords[]\relax%
      \if\relax\thewords[\xcnt,-1,-1]\relax%
        \if\relax\thewords[\the\numexpr\xcnt+1,1,1]\relax%
          \textcolor{\csname\thewordssep[\xcnt]color\endcsname}{\thewordssep[\xcnt]}%
        \else%
          \conditionalcolor{\xcnt}%
        \fi%
      \else%
        \conditionalcolor{\xcnt}%
      \fi%
    \fi%
  }%
}
\newcommand\conditionalcolor[1]{%
  \ifx\onlywords\onlywordstrue%
    \thewordssep[#1]%
  \else%
    \textcolor{\csname\thewordssep[#1]color\endcsname}{\thewordssep[#1]}%
  \fi%
}
\def\theparselist{}
\makeatletter
\newcommand\setcolor[2]{%
  \stepcounter{colorwords}%
  \ifnum\value{colorwords}=1\g@addto@macro\theparselist{#1}\else%
    \g@addto@macro\theparselist{||#1}\fi
  \expandafter\def\csname#1color\endcsname{#2}%
  \edef\thestring{\Capitalize#1\relax}%
  \g@addto@macro\theparselist{||}
  \expandafter\g@addto@macro\expandafter\theparselist\expandafter{\thestring}
  \expandafter\def\csname\thestring color\endcsname{#2}%
}
\makeatother
\def\Capitalize#1#2\relax{%
  \ifcase\numexpr`#1-`a\relax
   A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M\or
   N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z\else
   #1\fi#2%
}
\newcommand\resetcolorize{\gdef\theparselist{}\setcounter{colorwords}{0}}
\begin{document}
\setcolor{foo}{red}
\setcolor{bar}{blue!70}
\setcolor{baz}{cyan}
\setcolor{biz}{green!70!black}
\colorize{Lorem ipsum dolor foo sit amet bar: consectetuer adipiscing elit baz! Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Baz curabitur baz dictum gravida
mauris. Nam  biz arcu libero, nonummy eget, consectetuer id, vulputate a, bar magna.
Donec vehicula augue eu neque. foox xfoo ,foo foo, foo. xfoox meta -foo meta-foo
(foo)-bar.}

\def\onlywords{F}
\resetcolorize
\setcolor{a}{red}
\setcolor{e}{orange!90!black}
\setcolor{i}{cyan}
\setcolor{o}{green!85!black}
\setcolor{u}{blue!70}

\colorize{Lorem ipsum dolor foo sit amet bar: consectetuer adipiscing elit baz! Ut purus elit,
vestibulum ut, placerat ac, adipiscing vitae, felis. Baz curabitur baz dictum gravida
mauris. Nam  biz arcu libero, nonummy eget, consectetuer id, vulputate a, bar magna.
Donec vehicula augue eu neque. foox xfoo ,foo foo, foo. xfoox meta -foo meta-foo
(foo)-bar.}
\end{document}

在此处输入图片描述

相关内容