我想更改单词中几个字母的颜色。我使用以下命令:
... \color{g}a\color{d}way ..., or ... a\color{g}way \color{d} ...
这里,d 是默认颜色,g 被定义为新颜色,单词“away”中的字母被更改,如上所示。此解决方案通常有效;但是,在上述情况下,在字母 w 之前插入了一个小间隙。我注意到这个间隙只出现在字母 w 上。在我看来,这是程序中的一个错误。我使用 beamer 类并使用 pdflatex 进行编译。如果有人能告诉我如何解决这个问题,我将不胜感激。我尝试使用 latex 进行编译,然后使用 dvi 转换为 pdf,但这会产生相同的错误。
答案1
只是为了好玩,一个可以自动恢复字距的宏。
\documentclass{article}
\usepackage{xparse}
\usepackage{xcolor}
\colorlet{cw}{red!80!green}
\ExplSyntaxOn
\NewDocumentCommand{\cw}{m}
{
\leavevmode
\foo_cw:n { #1 }
}
\cs_new_protected:Nn \foo_cw:n
{
\tl_set:Nn \l__foo_cw_tl { #1 }
\regex_replace_all:nnN
{ (.?)\<(.{1})\>(.?) }
{ \c{__foo_cw_single:nnn}\cB\{\1\cE\}\cB\{\2\cE\}\cB\{\3\cE\} }
\l__foo_cw_tl
\regex_replace_all:nnN
{ (.?)\<(.?) }
{ \c{__foo_cw_start:nn}\cB\{\1\cE\}\cB\{\2\cE\} }
\l__foo_cw_tl
\regex_replace_all:nnN
{ (.?)\>(.?) }
{ \c{__foo_cw_end:nn}\cB\{\1\cE\}\cB\{\2\cE\} }
\l__foo_cw_tl
\tl_use:N \l__foo_cw_tl
}
\box_new:N \l__foo_cw_unkerned_box
\box_new:N \l__foo_cw_kerned_box
\cs_new_protected:Nn \__foo_cw_kern:nn
{
\hbox_set:Nn \l__foo_cw_unkerned_box { \hbox:n { #1 } \hbox:n { #2 } }
\hbox_set:Nn \l__foo_cw_kerned_box { #1#2 }
\kern \dim_eval:n { \box_wd:N \l__foo_cw_kerned_box - \box_wd:N \l__foo_cw_unkerned_box } \scan_stop:
}
\cs_new_protected:Nn \__foo_cw_single:nnn
{
#1
\__foo_cw_kern:nn { #1 } { #2 }
\textcolor{cw}{#2}
\__foo_cw_kern:nn { #2 } { #3 }
#3
}
\cs_new_protected:Nn \__foo_cw_start:nn
{
#1
\__foo_cw_kern:nn { #1 } { #2 }
\group_begin:
\color{cw}
#2
}
\cs_new_protected:Nn \__foo_cw_end:nn
{
#1
\group_end:
\__foo_cw_kern:nn { #1 } { #2 }
#2
}
\ExplSyntaxOff
\begin{document}
away away away
\cw{<a>way} \cw{a<w>ay} \cw{awa<y>}
\cw{<aw>ay} \cw{a<wa>y} \cw{aw<ay>}
\end{document}
x<a>y
像(其中x
或z
可以缺失)这样的序列被转换为\__foo_cw_single:nnn{x}{a}{z}
,然后变成
x<kern between x and a>\textcolor{cw}{a}<kern between a and y>y
类似 (和x<a...b>y
之间有多个字母)的序列变成<
>
x\__foo_cw_start:nn{x}{a}...\__foo_cw_end:nn{b}{y}
随后转化为
x<kern between x and a>\begingroup\color{cw}a...b\endgroup<kern between b and y>y
u
两个字母和之间的字距是通过从的宽度中v
减去的宽度计算得出的。\hbox{\hbox{u}\hbox{v}}
\hbox{uv}
答案2
如果您添加,\showoutput
您可以看到字体添加的所有字距。这里有些不寻常的是,每个字母之间away
都有字距\kern-0.27779pt
,因此您可以按如下方式进行更正:
\documentclass{article}
\usepackage{color}
\showoutput
\begin{document}
away away away away
\textcolor{red}{a}way a\textcolor{red}{w}ay aw\textcolor{red}{a}y awa\textcolor{red}{y}
\textcolor{red}{a}\kern-0.27779pt way
a\kern-0.27779pt \textcolor{red}{w}\kern-0.27779pt ay
aw\kern-0.27779pt\textcolor{red}{a}\kern-0.27779pt y
awa\kern-0.27779pt\textcolor{red}{y}
\end{document}