为某些特定字符的所有出现位置着色

为某些特定字符的所有出现位置着色

我一直在想如何做一些对我正在写的文档绝对重要的事情。(我通常使用 XeLaTeX,但如果需要的话我也不介意更改。)

我想要一个字符列表(大概是日文字符,但也可能包括其他字符),这些字符将以特定方式排版。例如,将文档中的所有“u”和“W”都设为红色。

对我来说,目标是突出显示儿童应该学习的一组字符中的所有字符(文本)。

现在我知道我可以为每个字符定义一个宏或一个新命令,然后用该宏替换所有出现的字符,但这将是一项艰巨的工作,因为我预计不同字符的数量约为 200。

有人有想法吗?非常感谢。

答案1

这正是 XeTeX 可以轻松实现的功能之一。请参阅字符类在其文档中(texdoc xetex在您的 TeXLive/MikTeX 安装中或http://texdoc.net/texmf-dist/doc/xetex/xetexref/xetex-reference.pdf)。

这是一个例子,但你绝对应该查看 XeTeX 参考以了解更多信息,尤其是当你提到日语字符时,因此你可能必须在下面的模型上添加行,将“0”替换为“1”、“2”和“3”。

\documentclass{article}
\usepackage{color}

\XeTeXinterchartokenstate = 1
\newXeTeXintercharclass \mycharclassRed
\XeTeXcharclass `\u \mycharclassRed
\XeTeXcharclass `\W \mycharclassRed
% adding the more frequent lowercase w:
\XeTeXcharclass `\w \mycharclassRed


\XeTeXinterchartoks 0 \mycharclassRed   = {\bgroup\color{red}}
\XeTeXinterchartoks 255 \mycharclassRed = {\bgroup\color{red}}

\XeTeXinterchartoks \mycharclassRed 0   = {\egroup}
\XeTeXinterchartoks \mycharclassRed 255 = {\egroup}

\begin{document}

I have been wondering for ages how to do something that is absolutely crucial
to the document I am writing. (I usually use Xe\LaTeX, but I don’t mind
changing if required.)

I would like to have a list of characters (presumably Japanese characters, but
maybe other ones as well) that would be typeset in a specific way. For
instance, put all the `u' and  `W' of the document in red.

In my case, the goal is to highlight all the characters (of a text) that are
among a set of characters children should learn.

Now, I know I could define a macro or a new command for every character and
then replace all its occurrences with that macro, but that would be a titanic
job because I expect the number of different characters to be around 200.

Does anyone have an idea ? Thank you very much.


\end{document}

% Local Variables:
% TeX-engine: xetex
% End:

在此处输入图片描述

在此示例中,还在和w中添加了 小写字母以便突出显示。uW

答案2

这是一个基于 LuaLaTeX 的解决方案。它定义了一个名为 的 Lua 函数color_chars,该函数将预定义字符集中包含的所有字符实例渲染为红色。代码使用 函数,unicode.utf8.gsub而不是更基本的string.gsub,以便它可以处理非 ASCII 编码的字符。代码处理不是对 TeX 和 LaTeX 宏进行操作。

LaTeX 宏\ColorMeOn和分别启用和禁用对输入流\ColorMeOff的操作。color_chars

在下面的例子中,如果已执行,则所有q和的实例Q都会自动呈现为红色。\ColorMeOn

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article} 
\usepackage{luacode,xcolor}
\begin{luacode}
function color_chars ( s )
   s = unicode.utf8.gsub ( s , "(\\?)([%a%@]+)" , function( back, text )
       if back=="" then 
           text = unicode.utf8.gsub (text, "[qQ]", 
               "\\textcolor{red}{%0}" )  
       end
       return back .. text
   end)
   return s
end
\end{luacode}

\newcommand\ColorMeOn{\directlua{luatexbase.add_to_callback(
    "process_input_buffer", color_chars, "ColorMe")}}
\newcommand\ColorMeOff{\directlua{luatexbase.remove_from_callback(
    "process_input_buffer", "ColorMe")}}

\begin{document}
\ColorMeOn
quick Quiet

\ColorMeOff
quick Quiet
\end{document}

答案3

您可以使用newunicodechar

\documentclass{article}
\usepackage{xeCJK}
\usepackage{newunicodechar}
\usepackage{xcolor}

\newunicodechar{の}{\textcolor{red}{の}}

\begin{document}

都市というのは、都市としての発展の力学・ダイナミズムがあり、それは行政区分や行政機関とは必ずしも合致しない形で起きるが、東京都を語る上ではそこにある東京という巨大都市のことは無視できないので、ここで(地方自治体としての東京都ではなく)東京都内にある都市や場所としての東京にも一応触れておくと、都市としての東京は、元々は江戸幕府が置かれた江戸であり、徳川家康の都市計画によって築かれ、大いに繁栄した都市である。江戸も幕末の動乱を経る。明治元年の文書から「東京」と表記されるようになった。(江戸時代後期の佐藤信淵の著書『混同秘策』にすでに書かれていた、江戸を「東京」と改称する案を、大久保利通は読んで知っており、明治の新政府発足の折にその案を採用し、提案したことでその名になった。)しかし、日本の行政区画上東京と言う都市は現在は存在しない。

\end{document}

文本取自日语维基百科上有关东京的页面。我不知道文本的含义,也不知道为什么会出现替换字符。

在此处输入图片描述

答案4

只需让您的宏接受一个参数,然后将字符提供给宏即可。如果要将它们格式化为一致,您需要宏,用于格式化 200 个字符。您不需要(或不想要)200 个宏。

例如,

\documentclass{article}
\usepackage{xcolor}
\newcommand*\learnme[1]{\textcolor{red}{#1}}
\begin{document}
ABC\learnme{W}XY\learnme{U}VZ.
\end{document}

红色字母日?

相关内容