Xelatex e comportamento estranho da cor do texto no tikz

Xelatex e comportamento estranho da cor do texto no tikz

Aqui está um exemplo mínimo de trabalho:

\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}

Compilar isso pdflatexfornece a saída esperada: insira a descrição da imagem aqui

Mas compilar isso xelatexdá o seguinte comportamento estranho: insira a descrição da imagem aqui

O texto após \textcolor{red}{Red}parece estar voltando para preto no formato xelatex. Existe uma maneira de corrigir isso?

Responder1

Existem questões semelhantes, por exemplo:

A questão principal é que no final \textcolorhá um \reset@colorque não sabe qual a cor adequada para restaurar.


O problema evolui quandoentra. Basicamente a história é a seguinte:

  1. cargas pdftex.defou xetex.defde acordo com o compilador atual.
  2. pdftex.defirá definir \reset@color;
    xetex.defirá definir \reset@color@nostacke \reset@color@stack.
  3. redefine \reset@color.
  4. xetex.defdecidirá se será \reset@color@nostackou \reset@color@stackserá o \reset@color.

Aqui1,2,3acontece em \documentclass{beamer}e4acontece às \begin{document}.

Agora você pode ver um problema: para XeLaTeX, já que4acontece depois3, reset@coloré redefinido para ser uma versão não-beamer.


O código a seguir ilustra a diferença mais claramente

\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 oferece

e XeLaTeX dá

Nenhum deles é esperado. O que queremos é amarelo. Mas, relutantemente, o branco é melhor que o preto. E o branco é realmente feito pela versão beamer \reset@colore o preto é feito pela xetex.defversão.

informação relacionada