\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
无法工作。
您可以使用width
TikZ 数学引擎提供的功能:
\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}
答案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 树上解决了这个问题。