Wie kann ich Schalter an den vorhandenen Wert des TikZ-Schriftschlüssels anhängen?

Wie kann ich Schalter an den vorhandenen Wert des TikZ-Schriftschlüssels anhängen?

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 \sffamilySchriftart 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 fontEinstellungen 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 fontEinstellung ü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}

Bildbeschreibung hier eingeben

Beim Durchblättern des Handbuchs fand ich den <key>/.appendHandler, 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}

Bildbeschreibung hier eingeben

Daher habe ich zwei Fragen:

  • Warum font/.append=\itshapeklappt 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=\itshapees 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}

Bildbeschreibung hier eingeben

Deshalb funktioniert das: Der fontSchlüssel ist (grob) definiert mit

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

Bei Bedarf fontwird der Wert für dann über abgerufen \tikz@textfont. Die Lösung besteht also darin, zu erweitern, \tikz@textfontum den aktuellen Wert von zu erhalten font, und dann manuell die gewünschten Schriftartschalter anzuhängen.

Ich weiß jedoch nicht, warum fontder Wert in gespeichert wird, \tikz@textfont anstatt direkt ein Werteschlüssel zu sein.

verwandte Informationen