Можно ли определить внутреннее значение sep узла с помощью относительных единиц в терминах значения ключа шрифта в области видимости?

Можно ли определить внутреннее значение sep узла с помощью относительных единиц в терминах значения ключа шрифта в области видимости?

Очень часто я обнаруживаю, что определяю стили для различных аннотаций к рисункам. Это отлично подходит для структурирования фигур. Однако есть одна мелочь, которую я надеюсь улучшить. Это связано с тем, что любые относительные размеры (единицы измерения exили em) всегда интерпретируются TiкZ относительно размера шрифта, действующего на «уровне» tikzpictureсамого кода.

Если мне нужно изменить размер шрифта одной аннотации font=\tiny, например, с помощью , мне также придется вручную настроить значение inner sep, поскольку значение по умолчанию (или то, что указано в определении стиля) не всегда выглядит так хорошо с измененным размером шрифта.

Если бы я мог настроить определения стилей так, чтобы значение fontиспользовалось в качестве основы для любого exили emизмерений в inner sep, эта проблема могла бы решиться сама собой. Я бы также рассмотрел решение, в котором значения fontи inner sepуказываются как аргументы стиля, если это позволяет преодолеть это ограничение.

Вот MWE:

\documentclass[tikz]{standalone}
\tikzset{
  my inner sep/.style={inner sep=#1}, % how to define this?
  every node/.style={anchor=south west},
}

\begin{document}
\begin{tikzpicture}
  \node[my inner sep=0.2em] (A) {A};
  \node[font=\tiny,my inner sep=0.2em] (B) {B};
  \foreach \node in {A,B} {
    \draw[blue,line width=0.01pt] % just to show the baselines
      (\node.south west) |- (\node.base) -| (\node.north east);
  }
\end{tikzpicture}
\end{document}

Текущий выход:

введите описание изображения здесь

Синие линии волос нужны только для того, чтобы показать базовую линию каждого узла. Как показано, базовые линии находятся на одинаковом расстоянии от нижней части узлов. Подходящее определение my inner sepсоздаст вывод с текстом, Bсмещенным вниз и влево от его позиции, показанной выше, поскольку 0.2emin \tinyменьше, чем 0.2emin \normalsize.

Возможна ли такая цель с текущим Ti?кАрхитектура Z/порядок операций? Если да, то как это можно сделать?

решение1

Оттуда PGF 3.0естьnode font ключ, который задает шрифт для узла.ииспользуется как шрифт в расчетах размеров узлов с использованием emи ex. См. раздел 17.4.2(«Параметры текста: Шрифт») в PGF 3.0руководстве.

\documentclass[tikz, border=5]{standalone}
\begin{document}
\begin{tikzpicture}[every node/.style={fill=gray!50, anchor=south west}]
  \node [inner sep=1em]                  at (0,0) (A) {A};
  \node [font=\tiny,      inner sep=1em] at (0,1) (B) {B};
  \node [node font=\tiny, inner sep=1em] at (0,2) (C) {C};
  \foreach \n in {A,B,C} {
    \draw[red, very thin, <->] (\n.base west) -- (\n.base east);
    \draw[red, very thin, <->] (\n.text |- \n.south) -- (\n.text |- \n.north);
  }
\end{tikzpicture}
\end{document}

введите описание изображения здесь

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