如何將開關附加到 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 而不是直接作為值鍵。

相關內容