¿Es posible agregar interruptores a la configuración existente para la font
clave TikZ?
Por ejemplo, supongamos que quiero que todos los nodos estén en el \sffamily
tipo 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
font
configuració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 font
configuració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}
Buscando en el manual, encontré el <key>/.append
controlador, 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}
Por tanto, tengo dos preguntas:
- ¿Por qué
font/.append=\itshape
no 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=\itshape
no 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}
He aquí por qué esto funciona: la font
clave se define (aproximadamente) con
\tikzset{font/.code=\def\tikz@textfont{#1}}
font
Cuando sea necesario, se accede al valor de a través de \tikz@textfont
. Entonces, la solución es expandir \tikz@textfont
para obtener el valor actual de font
y luego agregar manualmente los cambios de fuente que queramos.
Sin embargo, no sé por qué font
almacena su valor en \tikz@textfont
lugar de ser una clave de valor directamente.