在下面的代码中,我想使用 的宽度和高度来计算偏移量{\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 xsep
和inner ysep
的值是 .3333em,即字体和字体大小相关的值。
我不使用\tiny 1234
或,而是使用font = \tiny
node 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}