
Вот минимальный рабочий пример:
\documentclass{beamer}
\usepackage{tikz}
\setbeamercolor{background canvas}{bg=black}
\setbeamercolor{normal text}{fg=white}
\begin{document}
\begin{frame}
\frametitle{Test}
Normal \textcolor{red}{Red} Normal
\begin{tikzpicture}
\node at (0,0) {Normal \textcolor{red}{Red} Normal};
\end{tikzpicture}
\end{frame}
\end{document}
Компиляция этого кода pdflatex
даёт ожидаемый результат:
Но компиляция этого кода xelatex
приводит к следующему странному поведению:
Текст после, \textcolor{red}{Red}
похоже, по умолчанию снова становится черным в xelatex
. Есть ли способ это исправить?
решение1
Есть похожие вопросы, например:
Главный вопрос в том, что в конце концов \textcolor
возникает \reset@color
вопрос, какой цвет нужно восстановить.
Проблема возникает, когдапроекторВ общем, история такова:
- графиканагрузки
pdftex.def
илиxetex.def
в соответствии с текущим компилятором. pdftex.def
определит\reset@color
;
xetex.def
определит\reset@color@nostack
и\reset@color@stack
.- проекторпереопределяет
\reset@color
. xetex.def
решит, будет ли\reset@color@nostack
или\reset@color@stack
будет\reset@color
.
Здесь1,2,3происходит в \documentclass{beamer}
и4происходит в \begin{document}
.
Теперь вы видите проблему: для XeLaTeX, поскольку4происходит после3, reset@color
переопределена как версия без поддержки Beamer.
Следующий код более наглядно иллюстрирует разницу.
\documentclass{beamer}
\usepackage{tikz}
\setbeamercolor{background canvas}{bg=teal}
\setbeamercolor{normal text}{fg=white}
\begin{document}
\frame{
\tikz{
\node[text=yellow]{
Yellow
\textcolor{red}{Red}
What?
};
}
}
\end{document}
LaTeX дает
и XeLaTeX дает
Ни один из них не ожидается. То, что мы хотим, это желтый. Но неохотно, белый лучше черного. И белый действительно сделан версией прожектора, \reset@color
а черный сделан версией xetex.def
.