
Obrigado a Sašo Živanović por ajudar a identificar o problema que surge como resultado da minha tentativa de aplicar opções como blue
ou text=blue
a nós dentroFlorestaárvores que incluem catracas docatracapacote.
Normalmente, se eu aplicar uma opção de cor como blue
a de um nó TikZ, o conteúdo do nó será colorido, seja texto ou matemática.
Contudo, se o nó incluir uma catraca fornecida pelocatracaembalagem, então a coloração afeta apenas o conteúdo antes e depois da catraca. A catraca em si não é afetada.
Se eu usar text=blue
, apenas o conteúdo anterior à catraca será colorido. Nem a catraca nem nada depois dela foi afetada.
Fora do tikzpicture
ambiente, entretanto, as catracas são coloridas normalmente, junto com o texto ou matemática ao redor.
Por exemplo,
{\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$}; }
produz
Sašo Živanović estabeleceu que a questão aqui não é específica das catracas, mas se aplica a qualquer conteúdo que seja utilizado \sbox{}
de forma semelhante. Por exemplo:
\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.};}
produz
Essa questão, ao qual também estou em dívida com Sašo Živanović por me dirigir, parece relacionado.
Suponho, pela discussão aí, que o \sbox{}
é executado antes da opção blue
ou text=blue
é aplicado ao conteúdo do nó, de modo que a cor ativa no ponto em que a caixa é salva não é sensível às opções aplicadas ao nó.
Isso está correto? O efeito é evitável? E por que faz text=blue
algo diferente? O efeito do não deveria \sbox{}
ser limitado ao seu grupo, de modo que, mesmo que seu conteúdo permaneça preto, o conteúdo seguinte deveria ser colorido adequadamente?
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}
Responder1
Isto parece ser uma falha no suporte de cores pgf, que não está definindo a cor atual conforme entendida pelo 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}
produz um 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 quando \color{blue}
foi usado, \current@color
é (o pdf para) azul, porém no node[blue]
caso, embora o texto seja azul, \current@color
é (o pdf para) preto.
Isto é importante porque \sbox
não "sabe" o estado da pilha de cores mantida pelo backend do pdf ou driver dvi, apenas define a cor do texto salvo para\current@color
Na verdade, o \resetcurrentcolor
comando não define a cor (ele emite no \special
ou \pdfliteral
), apenas redefine \current@color
para usar a cor do traço conforme definida pela última vez pelo PGF.