TikZ フォント キーの既存の値にスイッチを追加するにはどうすればよいですか?

TikZ フォント キーの既存の値にスイッチを追加するにはどうすればよいですか?

TikZ キーの既存の設定にスイッチを追加することは可能ですかfont?

たとえば、すべてのノードを 書体で表示したいとします\sffamily。これは、 を設定することで実現できます。後で、設定を継承し、さらに斜体の形状 を使用するevery node/.append style={font=\sffamily}ノードが必要になる場合があります。残念ながら、次に示すように、 を単に追加するだけでは機能しません。これを行うと、以前の設定が上書きされ、デフォルトの書体ファミリ (斜体) が使用されます。every node font\itshapefont=\itshapefont

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

ここに画像の説明を入力してください

マニュアルを調べてみると、<key>/.append期待できそうなハンドラーが見つかりました。

キー ハンドラーは、に格納されている値の末尾に を<key>/.append={<append value>}
追加します。<append value><key>

を使用した場合はどうなるでしょうかfont/.append=\itshape? まあ、これも機能しません:

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

ここに画像の説明を入力してください

そこで、2つの質問があります。

  • ここではなぜfont/.append=\itshape機能しないのですか?
  • の既存の設定にスイッチを追加するにはどうすればよいですかfont?

答え1

font/.append=\itshape2 番目の質問に対する答えは次のとおりです。なぜ機能しないのかはわかりません。

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

ここに画像の説明を入力してください

これが機能する理由は次の通りです。fontキーは(大まかに)次のように定義されます。

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

必要に応じて、 の値に をfont介してアクセスします \tikz@textfont。したがって、解決策としては、 を展開\tikz@textfontして の現在の値を取得しfont、必要なフォント スイッチを手動で追加します。

しかし、なぜ値キーを直接使用せずfontに値を格納するのかはわかりません。\tikz@textfont

関連情報