Как добавить переключатели к существующему значению ключа шрифта 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 а не использует его напрямую как значение-ключ.

Связанный контент