TikZ 图表中使用的物体的宽度和高度

TikZ 图表中使用的物体的宽度和高度

在下面的代码中,我想使用 的宽度和高度来计算偏移量{\tiny any integer}。我的需求是自动调整装饰红框的宽度和高度,并将红色文本定位在合适的位置。

在此处输入图片描述

最简单的方法是什么?

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

\usepackage{nicematrix}

% Need: use of the width and the height of the #3 argument
% to calculate the good value instead of the +/- 8pt.
%
% yshift and xshift not have to be equal.
\newcommand\stepit[3]{
    \node[red] 
        at ($([shift={(-8pt,-8pt)}] #1-|#2)!.5!(#1-|#2)$) 
        {\tiny #3};

    \draw[red] 
        ([xshift=-8pt] #1-|#2) 
        --
        ([shift={(-8pt,-1.75ex)}] #1-|#2)
        --
        ([yshift=-1.75ex] #1-|#2);
}

\begin{document}

\begin{NiceTabular}{l*{4}{|w{c}{2.5cm}@{}}@{\hspace{-1pt}}}
            & Magie
            & Théâtre
            & Photo
            & Total \\
    \hline
    Adultes & 123
            & 
            & 
            &  \\
    \hline
    Enfants & 
            & 
            & Value
            &  \\
    \hline
    Total   & 
            &
            &
            & Total
\CodeAfter
    \begin{tikzpicture}
        \stepit{2}{3}{1234}
        \stepit{4}{4}{56}
        \stepit{2}{4}{7}
    \end{tikzpicture}
\end{NiceTabular}

\end{document}

答案1

虽然有 PGFMath 函数可以测量文本的尺寸,即

  • height("\tiny 1234")
  • depth("\tiny 1234")
  • width("\tiny 1234")

一个节点已经为您完成了这一操作(它测量了盒子及其内容的\ht\dp\wd)以在其周围创建矩形。

它用和的值填充此框,默认情况下,inner xsepinner ysep的值是 .3333em,即字体和字体大小相关的值。

我不使用\tiny 1234或,而是使用font = \tinynode font = \tiny它还将\tiny字体应用于这些值,在我看来,这已经创建了视觉上美观的输出。

将此节点的东北角/锚点放置在交叉点处(#1-|#2)

我选择使用命名此节点并使用它的名称(重新)绘制边框,而不是命名此节点,而是在可用于引用此节点的append after command节点后附加路径规范。 所有节点始终都有名称,如果不是由用户命名(通过或语法)。它获得一个内部名称,允许您使用它而不必考虑任何可能覆盖另一个名称的名称。不过,这不是问题,因为您可以给它们都赋予相同的名称,因为您不需要再引用它们了。\tikzlastnode
name()tikz@f@<number>\tikzlastnode\stepit

如果您不使用,outer sep = 0pt结果线就不会精确地位于绘制的节点边框的上方。

以下是同一个示例的近距离视图,其中绘制了节点和ultra thick线宽。
左:(outer sep = .5\pgflinewidth默认)
outer sep = 0pt::
在此处输入图片描述在此处输入图片描述

代码

\documentclass[multi=NiceTabular]{standalone}
% \documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{nicematrix}

% Need: use of the width and the height of the #3 argument
% to calculate the good value instead of the +/- 8pt.
%
% yshift and xshift not have to be equal.
\newcommand\stepit[3]{
  \draw[
    shorten >=+.5\pgflinewidth,
    shorten <=+.5\pgflinewidth,
    red]
   node[
     node font=\tiny,
     anchor=north east,
     outer sep=+0pt,
     append after command={
       (\tikzlastnode.north west) |- (\tikzlastnode.south east)
     }] at (#1-|#2) {#3};
}
\begin{document}
\begin{NiceTabular}{l*{4}{|w{c}{2.5cm}@{}}@{\hspace{-1pt}}}
            & Magie
            & Théâtre
            & Photo
            & Total \\
    \hline
    Adultes & 123
            & 
            & 
            &  \\
    \hline
    Enfants & 
            & 
            & Value
            &  \\
    \hline
    Total   & 
            &
            &
            & Total
\CodeAfter
    \begin{tikzpicture}
        \stepit{2}{3}{1234}
        \stepit{4}{4}{56}
        \stepit{2}{4}{7}
    \end{tikzpicture}
\end{NiceTabular}

\end{document}

输出

输出

相关内容