¿Cómo puedo agregar cambios al valor existente de la clave de fuente TikZ?

¿Cómo puedo agregar cambios al valor existente de la clave de fuente TikZ?

¿Es posible agregar interruptores a la configuración existente para la fontclave TikZ?

Por ejemplo, supongamos que quiero que todos los nodos estén en el \sffamilytipo de letra. Esto se puede hacer configurando every node/.append style={font=\sffamily}. Es posible que más adelante desee tener un nodo que herede la every node fontconfiguración y, además, use la forma en cursiva \itshape. Desafortunadamente, como se muestra a continuación, no funciona simplemente agregar font=\itshape; al hacerlo, se anula la fontconfiguración anterior y se utiliza la familia de tipos predeterminada (en cursiva).

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

ingrese la descripción de la imagen aquí

Buscando en el manual, encontré el <key>/.appendcontrolador, que parecía prometedor.

Controlador de claves <key>/.append={<append value>}
Agrega <append value>al final del valor almacenado en <key>.

¿Qué pasa si uso font/.append=\itshape? Pues esto tampoco 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}

ingrese la descripción de la imagen aquí

Por tanto, tengo dos preguntas:

  • ¿Por qué font/.append=\itshapeno funciona aquí?
  • ¿Cómo puedo agregar cambios a la configuración existente font?

Respuesta1

Aquí hay una respuesta a la segunda pregunta; No sé por qué font/.append=\itshapeno 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}

ingrese la descripción de la imagen aquí

He aquí por qué esto funciona: la fontclave se define (aproximadamente) con

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

fontCuando sea necesario, se accede al valor de a través de \tikz@textfont. Entonces, la solución es expandir \tikz@textfontpara obtener el valor actual de fonty luego agregar manualmente los cambios de fuente que queramos.

Sin embargo, no sé por qué fontalmacena su valor en \tikz@textfont lugar de ser una clave de valor directamente.

información relacionada