是否可以将开关附加到 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
而不是直接将其作为值键。