在 tikzpicture 中使用 \widthof 时出错

在 tikzpicture 中使用 \widthof 时出错
\documentclass{article}

\usepackage{tikz}
\usepackage{calc}

\begin{document}

\begin{tikzpicture}
    \newlength{\TextWidth}
    \setlength{\TextWidth}{\widthof{Text}}
    %\node[draw,text width=\widthof{Text}}]{Text}; % this does not work
    \node[draw,text width=\TextWidth]{Text}; % this works
\end{tikzpicture}

\end{document}

使用上面的代码我收到以下错误:

! 未定义控制序列。\pgfmath@dimen@ ...men@@ #1=0.0pt\relax \pgfmath@

l.9 \node[draw,text width=\widthof{Text}]{ 文本}

但我不明白为什么,因为这段代码以前是可以运行的。我正在使用 TeXLive 2015。

答案1

在 a 中tikzpicture,当前字体是\nullfont(参见第124-125页, pgfmanual),因此\widthof无法工作。

您可以使用widthTikZ 数学引擎提供的功能:

\documentclass{article}

\usepackage{tikz}
\usepackage{calc}

\begin{document}


\begin{tikzpicture}
  \node[draw,text width=width("Text")]{Text and text};
\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

Tikz 提供了自己的版本\widthof。无需 calc。但是最新版本无法加载它。

\documentclass{article}

\usepackage{tikz}

\makeatletter
% Stuff for calc compatiability.
\let\real=\pgfmath@calc@real
\let\minof=\pgfmath@calc@minof
\let\maxof=\pgfmath@calc@maxof
\let\ratio=\pgfmath@calc@ratio
\let\widthof=\pgfmath@calc@widthof
\let\heightof=\pgfmath@calc@heightof
\let\depthof=\pgfmath@calc@depthof
\makeatother

\begin{document}

\begin{tikzpicture}
    \node[draw,text width=\widthof{Text}]{Text};
\end{tikzpicture}

\end{document}

tikz图片

答案3

无论如何,这是一个强大的解决方法。也许其他人可以弄清楚如何制作一个\widthof可以在 Tikz parm 解析器中工作的版本。

\documentclass{article}
\usepackage{tikz}

\newlength{\pgfcalcparm}

\newcommand{\widthof}[1]% #1 = text
{\pgftext{\settowidth{\global\pgfcalcparm}{#1}}%
\the\pgfcalcparm}

\begin{document}
\begin{tikzpicture}
    \pgftext{\settowidth{\global\pgfcalcparm}{\bfseries Text}}%
    \node[draw,text width=\pgfcalcparm]{\bfseries Text};
    %\node[draw,text width=\widthof{Text}]{Text};% crashes (infinite loop)
\end{tikzpicture}
\end{document}

答案4

我在使用 TikZ-UML 和 PGF 3.0.1 时遇到了相同的错误消息。

下载版本 3.0.0并将内容复制到我的 TeX 树上解决了这个问题。

相关内容