在 TikZ 中沿曲线书写数学文本

在 TikZ 中沿曲线书写数学文本

我正在尝试在 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公式:rightcenterleft indentright indentfit to pathfit to path stretching spacestext align={left indent=1cm}

在此处输入图片描述

相关内容