Como posso acrescentar opções ao valor existente da chave da fonte TikZ?

Como posso acrescentar opções ao valor existente da chave da fonte TikZ?

É possível anexar opções às configurações existentes da fontchave TikZ?

Por exemplo, suponha que eu queira que todos os nós estejam no \sffamilytipo de letra. Isso pode ser feito configurando every node/.append style={font=\sffamily}. Mais tarde, talvez eu queira ter um nó que herde as every node fontconfigurações e, além disso, use a forma itálica \itshape. Infelizmente, como mostra o seguinte, não funciona simplesmente adicionar font=\itshape; isso substitui a fontconfiguração anterior e a família de tipos padrão (em itálico) é usada.

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
  \begin{tikzpicture}[every node/.append style={font=\sffamily}]
    \node {Sans serif};
    \node [font=\itshape] at (3,0) {Sans serif, italic};
  \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Procurando no manual, encontrei o <key>/.appendmanipulador, que parecia promissor.

Manipulador de chave <key>/.append={<append value>}
Adiciona o <append value>no final do valor armazenado em <key>.

E se eu usasse font/.append=\itshape? Bem, isso também não funciona:

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
  \begin{tikzpicture}[every node/.append style={font=\sffamily}]
    \node {Sans serif};
    \node [font/.append=\itshape] at (3,0) {Sans serif, italic};
  \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Assim, tenho duas perguntas:

  • Por que font/.append=\itshapenão funciona aqui?
  • Como posso anexar opções às configurações existentes font?

Responder1

Aqui está uma resposta para a segunda pergunta; Não sei por que font/.append=\itshapenão funciona.

\documentclass{standalone}
\usepackage{tikz}

\makeatletter
\tikzset{font append/.style={font/.expand once=\tikz@textfont #1},
         font append/.value required}
\makeatother

\begin{document}
  \begin{tikzpicture}[every node/.append style={font=\sffamily}]
    \node {Sans serif};
    \node [font append=\itshape] at (3,0) {Sans serif, italic};
  \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Veja por que isso funciona: a fontchave é (aproximadamente) definida com

\tikzset{font/.code=\def\tikz@textfont{#1}}

Quando necessário, o valor de fonté acessado por meio de \tikz@textfont. Portanto, a solução é expandir \tikz@textfontpara obter o valor atual de fonte, em seguida, anexar manualmente as opções de fonte desejadas.

No entanto, não sei por que fontarmazena seu valor em \tikz@textfont vez de ser uma chave de valor diretamente.

informação relacionada