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