我有以下片段,
% !TeX program = xelatex
% !TeX spellcheck = en_US
% !TeX encoding = UTF-8
\documentclass{book}
\usepackage{ctex}
\usepackage{xcolor}
\newcommand{\testtext}{補\sm{史記}的\zm{褚先生}名\sm{少孫},%
是\zm{漢朝}\zm{元}\zm{成}間的一個博士。}
\begin{document}
\Huge
\newcommand{\sm}[1]{\textcolor{red}{#1}}
\newcommand{\zm}[1]{\textcolor{blue}{#1}}
\testtext
\renewcommand{\sm}[1]{#1}
\renewcommand{\zm}[1]{#1}
\testtext
\end{document}
对于命令\sm
和\zm
,我只是使用来\textcolor
强调一些文本,但它给了我字符漢
和之间完全不同的结果朝
。
有人能解释一下原因吗?
结果截图:
答案1
为什么?
颜色命令处理颜色的方式是,它将颜色\vrule
与封闭材料所需的框尺寸一起放置,然后使用零宽度框进行排版\rlap
,然后覆盖文本以提供排版框和背景颜色。
如果你这样做:
\renewcommand{\sm}[1]{\hbox to 0pt{}#1}
\renewcommand{\zm}[1]{\hbox to 0pt{}#1}
TeX 将会看到相同类型的情况并且输出也会相同。
参见\color@block
彩色包装。
LuaTeX 直接编写颜色的 pdf 指令,而不是通过 a,\vrule
并且在两种情况下都会产生正确的输出。