tikzpicture 中的 \widthof

tikzpicture 中的 \widthof

在这个最小的例子中

\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

解决我的问题的方法是使用\pgfpositionnodelaterpgf-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}

相关内容