TikZ キーの既存の設定にスイッチを追加することは可能ですかfont
?
たとえば、すべてのノードを 書体で表示したいとします\sffamily
。これは、 を設定することで実現できます。後で、設定を継承し、さらに斜体の形状 を使用するevery node/.append style={font=\sffamily}
ノードが必要になる場合があります。残念ながら、次に示すように、 を単に追加するだけでは機能しません。これを行うと、以前の設定が上書きされ、デフォルトの書体ファミリ (斜体) が使用されます。every node
font
\itshape
font=\itshape
font
\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=\itshape
2 番目の質問に対する答えは次のとおりです。なぜ機能しないのかはわかりません。
\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