
Gracias a Sašo Živanović por ayudarme a identificar el problema que surge como resultado de intentar aplicar opciones como blue
o text=blue
a nodos dentroBosqueárboles que incluyen torniquetes de latorniquetepaquete.
Normalmente, si aplico una opción de color, como blue
a un nodo TikZ, el contenido del nodo se colorea, ya sea texto o matemáticas.
Sin embargo, si el nodo incluye un torniquete proporcionado por eltorniquetepaquete, entonces la coloración sólo afecta al contenido antes y después del torniquete. El torniquete en sí no se ve afectado.
Si uso text=blue
, solo se colorea el contenido anterior al torniquete. Ni el torniquete ni nada posterior se ve afectado.
Fuera del tikzpicture
entorno, sin embargo, los torniquetes se colorean normalmente, junto con el texto o las matemáticas que los rodean.
Por ejemplo,
{\color{blue}
\[
p \leftrightarrow q \sststile{}{} p \rightarrow q
\]
}
\centering
TikZ/blue:
\tikz{\node [blue] {$p \leftrightarrow q \sststile{}{} p \rightarrow q$}; }
TikZ/blue text:
\tikz{\node [text=blue] {$p \leftrightarrow q \sststile{}{} p \rightarrow q$}; }
produce
Sašo Živanović ha establecido que la cuestión aquí no es específica de los torniquetes, sino que se aplica a cualquier contenido que se utilice \sbox{}
de manera similar. Por ejemplo:
\newsavebox\mybox
{\color{blue} This is in blue. \sbox{\mybox}{This is in a box.}\usebox{\mybox} This is in blue.}
\tikz{\node[blue]{This is in blue. \sbox{\mybox}{This is in a box.}\usebox{\mybox} This is in blue.};}
produce
Esta pregunta, con el que también estoy en deuda con Sašo Živanović por dirigirme, parece estar relacionado.
Supongo, por la discusión allí, que \sbox{}
se ejecuta antes de la opción blue
o text=blue
se aplica al contenido del nodo, de modo que el color activo en el momento en que se guarda el cuadro no es sensible a las opciones aplicadas al nodo.
¿Es esto correcto? ¿Es el efecto evitable? ¿Y por qué hace text=blue
algo diferente? ¿No debería \sbox{}
limitarse el efecto de the a su grupo, de modo que incluso si su contenido permanece negro, el siguiente contenido debería tener el color apropiado?
MWE completo:
\documentclass{article}
\usepackage{turnstile,tikz}
\begin{document}
{\color{blue}
\[
p \leftrightarrow q \sststile{}{} p \rightarrow q
\]
}
\centering
TikZ/blue:
\tikz{\node [blue] {$p \leftrightarrow q \sststile{}{} p \rightarrow q$}; }
TikZ/blue text:
\tikz{\node [text=blue] {$p \leftrightarrow q \sststile{}{} p \rightarrow q$}; }
\newsavebox\mybox
{\color{blue} This is in blue. \sbox{\mybox}{This is in a box.}\usebox{\mybox} This is in blue.}
\tikz{\node[blue]{This is in blue. \sbox{\mybox}{This is in a box.}\usebox{\mybox} This is in blue.};}
\end{document}
Respuesta1
Esto parece ser una falla en la compatibilidad con el color pgf que no establece el color actual tal como lo entiende el látex.
\documentclass{article}
\usepackage{turnstile,tikz}
\makeatletter
\begin{document}
{\color{blue}
\[
p \leftrightarrow q \sststile{}{} p \rightarrow q
\]
}
\centering
TikZ/blue:
\tikz{\node [blue] {$p \leftrightarrow q \sststile{}{} p \rightarrow q$}; }
TikZ/blue text:
\tikz{\node [text=blue] {$p \leftrightarrow q \sststile{}{} p \rightarrow q$}; }
\newsavebox\mybox
{\color{blue} \show\current@color This is in blue. \sbox{\mybox}{This is in a box.}\usebox{\mybox} This is in blue.}
\tikz{\node[blue]{\show\current@color\show\pgf@strokecolor@global This is in blue. \sbox{\mybox}{This is in a box.}\usebox{\mybox} This is in blue.};}
\edef\foo#1#2#3#4#5{#3}
\def\resetcurrentcolor{\edef\current@color{\expandafter\foo\pgf@strokecolor@global}}
\tikz{\node[blue]{\resetcurrentcolor This is in blue. \sbox{\mybox}{This is in a box.}\usebox{\mybox} This is in blue.};}
\end{document}
produce un registro de
> \current@color=macro:
->0 0 1 rg 0 0 1 RG.
l.21 {\color{blue} \show\current@color
This is in blue. \sbox{\mybox}{This i...
?
> \current@color=macro:
->0 g 0 G.
l.24 \tikz{\node[blue]{\show\current@color
\show\pgf@strokecolor@global This ...
?
> \pgf@strokecolor@global=macro:
->\xcolor@ {}{0 0 1 rg 0 0 1 RG}{rgb}{0,0,1}.
l.24 ...\current@color\show\pgf@strokecolor@global
This is in blue. \sbox{\m...
?
mostrando que cuando \color{blue}
se usó, \current@color
es (el pdf de) azul sin embargo en el node[blue]
caso, aunque el texto es azul, \current@color
es (el pdf de) negro.
Esto es importante ya que \sbox
no "conoce" el estado de la pila de colores mantenida por el servidor de pdf o el controlador dvi; simplemente establece el color del texto guardado.\current@color
El \resetcurrentcolor
comando en realidad no establece el color (emite no \special
o \pdfliteral
), simplemente lo redefine \current@color
para usar el color del trazo establecido por última vez por PGF.