xcolor 命令 `\color` 在 xelatex 中停止工作

xcolor 命令 `\color` 在 xelatex 中停止工作

测试程序:

\documentclass{article}
\usepackage{xcolor}
\begin{document}
\color{red}1
\color{blue}0
... many lines ...
\color{red}1
\color{blue}0
\end{document}

测试结果:

只有前几行颜色正确。其余全部为蓝色。

使用\textcolor{...}{...}似乎可以,但用 则不行\color{...}

xelatex上述代码是 MWE,有 200 次重复(400 行)的 1 和 0。当使用 处理但没有 时,就会出现错误pdflatex

答案1

xdvipdfmx是 XeTeX 的 PDF 驱动程序,其颜色堆栈有限。每次使用(例如)时\color{red},它都会\special{color push rgb 1 0 0}将一种颜色推送到堆栈中,但由于您没有在任何地方结束组,因此该颜色会无限期地保留在堆栈中(不会\special{color pop}发生这种情况)。

xelatex程序默认使用 运行,这可以说是很糟糕的xdvipdfmx-q因此这种问题不会出现(因为在 TeX 运行期间检测不到)。如果你使用 运行xelatexxelatex --output-driver='xdvipdfmx' <file>.tex它会告诉你:

xdvipdfmx:warning: Color stack overflow. Just ignore.

您需要\color在组内使用,或者\reset@color手动执行。

以下示例代码显示了以下内容:

\documentclass{article}
\usepackage{xcolor}
\newcount\cnta
\begin{document}
\loop
\color{red}\the\cnta\space
\advance\cnta1
\color{blue}\the\cnta\par
\advance\cnta1
\ifnum\cnta<150
\repeat
\end{document}

相关内容