我的问题有点延伸这答案。我只想在文本适合路径时用文本装饰路径,但我还想知道装饰是否成功。我需要知道这一点才能再次使用较短的文本调用装饰。我需要这个来实现我的问题的解决方案这里。
目前,我最终在文档前言中自己修改了沿路径的装饰。我只是将文本装饰实现复制到我的前言中,然后按以下方式\makeatletter .. \makeatother
将设置标志添加到初始状态的末尾:persistent precomputation = {..}
\newif\iffit
\pgfdeclaredecoration{my text along path}{initial}{
\state{initial}[
width=+0pt,
next state=left indent,
persistent precomputation = {
...
\ifdim\pgf@lib@dec@text@width<\pgfdecoratedpathlength
\global \fittrue
\else
\global \fitfalse
\fi
}]{}
然后我可以\iffit
在代码中使用它来检查装饰是否成功。对于这种情况有没有更优雅的解决方案?
答案1
是的。添加以下内容
\makeatletter
\pgfutil@namedef{pgf@decorate@@text along path@left indent@code}{
\ifdim\pgf@lib@dec@text@width>\pgfdecoratedremainingdistance
\tikzerror{text too long}
\fi
}
\makeatother
看https://tex.stackexchange.com/a/358705/51022了解更多信息。
平均能量损失
\documentclass[border=9,tikz]{standalone}
\usetikzlibrary{decorations.text}
\begin{document}
\makeatletter
\pgfutil@namedef{pgf@decorate@@text along path@left indent@code}{
\ifdim\pgf@lib@dec@text@width>\pgfdecoratedremainingdistance
\tikzerror{text too long}
\fi
}
\makeatother
\begin{tikzpicture}
\draw[postaction={decorate,decoration={text along path,
text={Is this text long enough to trigger the error?}}}]
(0,0)--(2,0);
\end{tikzpicture}
\end{document}