我正在尝试在 TikZ 中沿着绘制的曲线编写一些数学文本。我已在此站点中阅读了两个相关问题:
并尝试按照答案中的方法操作,但只取得了部分成功。以下是我正在尝试执行的一个最小工作示例。
\documentclass[11pt,a4paper]{article}
\usepackage{tikz,pgfplots}
\usetikzlibrary{arrows.meta, decorations.text}
\begin{document}
\begin{center}
\begin{tikzpicture}[x=1.0cm,y=1.0cm,scale=1.0]
\draw [very thick,gray,opacity=0.4] (-2.5,-2.5) -- (2.5,2.5);
\draw [very thick,gray,opacity=0.4] (-2.5,2.5) -- (2.5,-2.5);
\draw[line width=3pt,domain=-1:1,smooth,variable=\x,black] plot ({1.7*sinh(\x)},{1.7*cosh(\x)});
\end{tikzpicture}
\end{center}
\end{document}
我希望在粗黑色双曲线段的某处写一些数学文本(例如,r=0),与曲线对齐但不一定居中。
我尝试了以下操作:
\documentclass[11pt,a4paper]{article}
\usepackage{tikz,pgfplots}
\usetikzlibrary{arrows.meta, decorations.text}
\begin{document}
\begin{center}
\begin{tikzpicture}[x=1.0cm,y=1.0cm,scale=1.0]
\draw [very thick,gray,opacity=0.4] (-2.5,-2.5) -- (2.5,2.5);
\draw [very thick,gray,opacity=0.4] (-2.5,2.5) -- (2.5,-2.5);
\draw[line width=3pt,domain=-1:1,smooth,variable=\x,black,%
postaction={decorate,%
decoration={text along path, text={$r=0$}, raise=5pt}}%
] plot ({1.7*sinh(\x)},{1.7*cosh(\x)});
\end{tikzpicture}
\end{center}
\end{document}
它产生了一些合理的结果(尽管我找不到如何沿曲线定位文本):
但我收到了我无法理解的编译错误:
./mwe.tex:14: Dimension too large.
<to be read again>
\relax
l.14 ] plot ({1.7*sinh(\x)},{1.7*cosh(\x)});
I can't work with sizes bigger than about 19 feet.
Continue and I'll use the largest value I can.
./mwe.tex:14: Dimension too large.
<recently read> \pgfmath@x
l.14 ] plot ({1.7*sinh(\x)},{1.7*cosh(\x)});
I can't work with sizes bigger than about 19 feet.
Continue and I'll use the largest value I can.
任何帮助都将不胜感激!
答案1
该Dimension too large
错误通常是由于默认情况下 PGF 计算依赖于 TeX\dimen
寄存器而造成的,而该寄存器的最大值是\maxdimen
,即16383.99999pt
,约为 226.7 英寸,也就是约 18.9 英尺,因此19 feet
您在报告的错误消息中提到了 。
就你的情况而言,问题似乎是由 引发的text along path
,由于特定数量的样本绘制曲线时(感谢@Schrödinger'scat指出这一点)。如果用 绘制曲线samples=15
,效果很好。
据我理解:大量样本意味着用于绘制曲线的“片段”非常短(大概是“小”贝塞尔曲线 :-)。该text along path
选项可能尝试确定要排版的文本的每个框下方片段的斜率,为此将片段的“delta y”除以其“delta x”(在这种情况下非常接近于零),这会产生一个太大而无法放入 TeX 寄存器的数字\dimen
。
\documentclass[tikz, border=1mm]{standalone}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}[x=1cm, y=1cm]
\path (0,2.9); % extend the upper side of the bounding box
\begin{scope}[very thick, gray, opacity=0.4]
\draw (-2.5,-2.5) -- (2.5,2.5);
\draw (-2.5,2.5) -- (2.5,-2.5);
\end{scope}
\draw[line width=3pt, domain=-1:1, smooth, variable=\x, black,
samples=15, % <-------- this
postaction={decorate,
decoration={text along path,
text={$r=0$}, raise=5pt,
% text align={left indent=1cm},
},
},
] plot ({1.7*sinh(\x)},{1.7*cosh(\x)});
\end{tikzpicture}
\end{document}
沿曲线定位文本的选项在钛钾Z & PGF 手册部分文本装饰(第656页左右)。它们包括align
、、、、、和。例如,如果您在我的示例中取消注释left
,您将获得从曲线最左边点一厘米处开始的 r = 0公式:right
center
left indent
right indent
fit to path
fit to path stretching spaces
text align={left indent=1cm}