为什么文本颜色会影响换行算法?

为什么文本颜色会影响换行算法?

我有以下片段,

% !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并且在两种情况下都会产生正确的输出。

相关内容