如何让 fontspec 在 XeLaTeX 中与白色文本配合使用

如何让 fontspec 在 XeLaTeX 中与白色文本配合使用

在上一个问题中(如何在 XeLaTeX 中全局设置文本颜色), 我问过如何在 XeLaTeX 中全局设置文本颜色,并得到了一些很好的答案。

然而,虽然所提出的机制在大多数情况下似乎有效,但它们似乎也始终无法解决颜色问题white。我不确定这是错误还是我在这里做错了什么,但请考虑以下示例:

\documentclass{report}
\usepackage{xcolor}
\usepackage{fontspec}
\setmainfont[Color=white]{Linux Libertine O}
\setsansfont[Color=white]{Linux Biolinum O}
\setmonofont[Color=white]{Inconsolata}

\pagecolor{darkgray}

\begin{document}
\chapter{A chapter}
\section{A section}
\texttt{Some mono text}
The text above is invisible as it is all black and not white.

{\addfontfeature{Color=yellow} Some yellow text showing up on the dark page.}
{\addfontfeature{Color=white} Some white text invisible on the dark page.}

\end{document}

该示例遵循@AlanMunn 在另一个问题上的建议。结果是:

白色文字为黑色

白色文字以黑色打印。其他颜色(如示例中的黄色)效果也很好。

如果我使用@Herbert的建议添加

\AtBeginDocument{\color{white}}

\addtokomafont{sectioning}{\color{white}}


文档中,我不断遇到仍为黑色的环境,例如图形的标题。无论如何,命令\color似乎比fontspec设置更强大。

对此有什么想法或解决方案吗?

答案1

这似乎是 XeTeX 的一个错误,因为

\font\x="Linux Libertine O:color=FFFFFF"
\x ABC\bye

以黑色打印 ABC,而

\font\x="Linux Libertine O:color=FFFFFE"
\x ABC\bye

以“几乎白色”打印 ABC。

所以答案可能是

\setmainfont[Color=FFFFFE]{Linux Libertine O}

这“解释”了艾伦的建议。

答案2

全部功劳归功于 Philippe Goutet,他在这里写了以下答案:如何在 XeLaTeX 中全局设置文本颜色

感谢 Alan Munn 指出这一点。


这里有一种方法可以实现这一点,无论你是否使用 XeLaTeX,无论你是否使用 Komascript,它都可以工作。它通过重新定义 LaTeX 使用的默认颜色来工作。

\documentclass{report}
%\documentclass{scrreprt}

\usepackage{xcolor}

\makeatletter
\newcommand{\globalcolor}[1]{%
  \color{#1}\global\let\default@color\current@color
}
\makeatother

\AtBeginDocument{\globalcolor{red}}

\begin{document}

\section{A section heading}

some test text

\end{document}

相关内容