Ist es möglich, den vorhandenen Einstellungen für die TikZ-Taste Schalter hinzuzufügen font
?
Angenommen, ich möchte beispielsweise, dass alle Knoten die \sffamily
Schriftart haben. Dies kann durch die Einstellung erreicht werden every node/.append style={font=\sffamily}
. Später möchte ich vielleicht einen Knoten haben, der die every node
font
Einstellungen erbt und zusätzlich die Kursivschrift verwendet \itshape
. Leider funktioniert es, wie das Folgende zeigt, nicht, einfach hinzuzufügen font=\itshape
. Dadurch wird die vorherige font
Einstellung überschrieben und die Standardtypfamilie (kursiv) wird verwendet.
\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}
Beim Durchblättern des Handbuchs fand ich den <key>/.append
Handler, der vielversprechend aussah.
Schlüsselhandler:
<key>/.append={<append value>}
Fügt<append value>
am Ende des in gespeicherten Werts hinzu<key>
.
Was wäre, wenn ich verwendet hätte font/.append=\itshape
? Nun, das funktioniert auch nicht:
\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}
Daher habe ich zwei Fragen:
- Warum
font/.append=\itshape
klappt das hier nicht? - Wie kann ich den bestehenden Einstellungen für Schalter hinzufügen
font
?
Antwort1
Hier ist eine Antwort auf die zweite Frage; ich weiß nicht, warum font/.append=\itshape
es nicht funktioniert.
\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}
Deshalb funktioniert das: Der font
Schlüssel ist (grob) definiert mit
\tikzset{font/.code=\def\tikz@textfont{#1}}
Bei Bedarf font
wird der Wert für dann über abgerufen
\tikz@textfont
. Die Lösung besteht also darin, zu erweitern, \tikz@textfont
um den aktuellen Wert von zu erhalten font
, und dann manuell die gewünschten Schriftartschalter anzuhängen.
Ich weiß jedoch nicht, warum font
der Wert in gespeichert wird, \tikz@textfont
anstatt direkt ein Werteschlüssel zu sein.