如何将开关附加到 TikZ 字体键的现有值?

如何将开关附加到 TikZ 字体键的现有值?

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

相关内容