スコープ内のフォント キー値に基づいて、相対単位でノードの内部 sep 値を定義できますか?

スコープ内のフォント キー値に基づいて、相対単位でノードの内部 sep 値を定義できますか?

さまざまな図面注釈のスタイルを定義することがよくあります。これは図を構造化するのに最適です。ただし、改善できる小さな点があります。これは、相対的な寸法(単位exまたはem)が常に Ti によって解釈されるという事実に起因しています。tikzpictureコード自体の「レベル」で有効なフォント サイズに対する Z。

font=\tinyたとえば、を使用して 1 つの注釈のフォント サイズを変更する必要がある場合inner sep、デフォルト値 (またはスタイル定義で指定された値) は変更されたフォント サイズで必ずしも適切に表示されるとは限らないため、値を手動で調整する必要もあります。

の値が の任意のまたは次元fontの基準として使用されるようなスタイル定義を設定できれば、この問題は自然に解決されるでしょう。また、この制限を克服できるのであれば、と の値がスタイルの引数として指定されるソリューションも検討します。exeminner sepfontinner 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テキストがシフトされた出力が生成されます。B0.2em\tiny0.2em\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}

ここに画像の説明を入力してください

関連情報