在粗体 tikz 文本装饰 |\bf|
被提及作为插入螺栓 tikz 文本装饰的一种可能方法。
如何确定粗体 tikz 文本装饰的宽度?
我尝试:
\documentclass[margin=1cm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% ...
\pgfmathsetmacro{\mywidth}{width("Some text")}
\pgfmathsetmacro{\mywidthb}{width("|\bf|Some bold text")}
%...
\end{tikzpicture}
\end{document}
编译遇到错误:
! Missing control sequence inserted.
<inserted text>
\inaccessible
l.7 ...ro{\mywidthb}{width("|\bf|Some bold text")}
宽度的应用如下将文本精确地置于路径上指定点的中心
答案1
您可以通过修补 来实现这一点\pgfmathparse
。您必须用 替换两个\edef
。\protected@edef
以下工作:
\documentclass{article}
\usepackage{tikz}
\makeatletter
\def\pgfmathparse@#1{%
% No (math) units yet.
\global\pgfmathunitsdeclaredfalse
\global\pgfmathmathunitsdeclaredfalse
% Expand expression so any remaining CSs are registers
% or box dimensions (i.e. |\wd|, |\ht|, |\dp|).
\protected@edef\pgfmath@expression{#1}%
%
\expandafter\pgfmathparse@trynumber@loop\pgfmath@expression\pgfmath@parse@stop
%
% this here is the _real_ parser. it is invoked by
% \pgfmathparse@trynumber@loop if that says "this is no number"
%\pgfmathparse@@\pgfmath@parse@stop%
}
\def\pgfmath@startgroup@#1{\protected@edef\pgfmathresult{#1}}
\makeatother
\begin{document}
\pgfmathsetmacro{\mywidth}{width("Some text")}
\pgfmathsetmacro{\mywidthb}{width("|\bf|Some bold text")}
\end{document}
答案2
首先,"|\bf|Some bold text"
应该在decorations.text
真正使用时"|\bfseries|Some bold text"
,应该看到此主题以获取更多信息,但正如你指出的那样,它们在这里都不起作用。更糟糕的是,通常的\setbox0\hbox{...}
技巧不起作用,因为 Ti钾Z 吞噬文本,参见例如这次讨论,由此我构建了一个可能的解决方案:中断tikzpicture
,测量,恢复tikzpicture
。当然,也可以使用不同的语法等等。
\documentclass[margin=1cm]{standalone}
\usepackage{tikz}
\makeatletter
\newcommand{\IfInTikzPic}{% https://tex.stackexchange.com/a/121309/4301
\ifx\pgfpictureid\@undefined
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi
}
\makeatother
% cf https://tex.stackexchange.com/a/459858/121799
\newcommand{\WidthOfStuff}[1]{\IfInTikzPic{\begin{pgfinterruptpicture}%
\setbox0\hbox{#1}%
\xdef\pgfmathresult{\the\wd0}%
\end{pgfinterruptpicture}}{%
\setbox0\hbox{#1}%
\xdef\pgfmathresult{\the\wd0}}}
\begin{document}
\begin{tikzpicture}
% ...
\pgfmathsetmacro{\mywidth}{width("Some text")}
\WidthOfStuff{\textbf{Some bold text}}
\pgfmathsetmacro{\mywidthb}{\pgfmathresult}
\node{\mywidth,\mywidthb};
%...
\end{tikzpicture}
\end{document}