在这个最小的例子中
\documentclass{scrartcl}
\usepackage{calc}
\usepackage{tikz}
\newlength{\TestLength}
\begin{document}
\setlength{\TestLength}{\widthof{\tikz \node {bla};}}
\showthe\TestLength% MEASUREMENT 1
\begin{tikzpicture}
\setlength{\TestLength}{\widthof{\node {bla};}}
\showthe\TestLength% MEASUREMENT 2
\end{tikzpicture}
\end{document}
\TestLength
第一次(测量 1)计算正确,但第二次(测量 2)计算太小。我想在 tikzpicture 环境中计算,这样我就可以固定使用第二种计算方式。有什么解决方法吗?
非常感谢您提出的任何评论或想法。
答案1
如果要测量已经排版并命名的节点的大小,可以使用以下代码:
\documentclass{article}
\usepackage{tikz}
\begin{document}
% \getwidthofnode will measure the width of the node given as its second
% parameter and store it into the first parameter.
\makeatletter
\newcommand\getwidthofnode[2]{%
\pgfextractx{#1}{\pgfpointanchor{#2}{east}}%
\pgfextractx{\pgf@xa}{\pgfpointanchor{#2}{west}}% \pgf@xa is a length defined by PGF for temporary storage. No need to create a new temporary length.
\addtolength{#1}{-\pgf@xa}%
}
\makeatother
\newlength\TestLength
\begin{tikzpicture}
\node (mynode) {bla};
\getwidthofnode{\TestLength}{mynode}
\showthe\TestLength
\end{tikzpicture}
\end{document}
答案2
解决我的问题的方法是使用\pgfpositionnodelater
pgf-package (版本 2.10) 的命令。感谢 Caramdir 提示了这种可能性。
\documentclass{scrartcl}
\usepackage{calc}
\usepackage{tikz}
\newlength{\TestLength}
\newlength{\myminx}
\newlength{\mymaxx}
\newcommand{\PgfPosition}{%
\global\let\myminx=\pgfpositionnodelaterminx%
\global\let\mymaxx=\pgfpositionnodelatermaxx%
}%
\begin{document}
\setlength{\TestLength}{\widthof{\tikz \node {bla};}}
\showthe\TestLength% MEASUREMENT 1
\begin{tikzpicture}
\setlength{\TestLength}{\widthof{\node {bla};}}
\showthe\TestLength% MEASUREMENT 2
\end{tikzpicture}
\begin{tikzpicture}
{%
\pgfpositionnodelater{\PgfPosition}%
\node {bla};%
\setlength{\TestLength}{\mymaxx}%
\addtolength{\TestLength}{-\myminx}%
\global\TestLength=\TestLength
}%
\showthe\TestLength% MEASUREMENT 3
\end{tikzpicture}
\end{document}