是否可以將開關附加到 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}
因此,我有兩個問題:
- 為什麼
font/.append=\itshape
這裡不起作用? - 如何將開關附加到現有設定
font
?
答案1
這是第二個問題的答案;我不知道為什麼font/.append=\itshape
不起作用。
\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
而不是直接作為值鍵。