tikz decorations.markings 导致“尺寸太大”

tikz decorations.markings 导致“尺寸太大”

我想画出一组中间带有箭头的平滑曲线。所以我必须结合decorationsmooth选项。但是,这两个选项都会导致dimension too large错误。

如果我删除smooth选项,它就会编译。另一方面,不合适的标记位置也会导致同样的错误。

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{calc,decorations.markings}

\begin{document}
\begin{tikzpicture}
    \newcommand\arrowcurve[3][]{\addplot[#1,decoration={markings,mark=at position #2 with {\arrow{>}}},postaction={decorate}]   coordinates {#3} }

\begin{axis}[hide x axis, hide y axis]
\foreach \i/\j in {1/1,-1/1,-1/-1,1/-1} {
\foreach \t in {20,35,50,60,70,80} {
    \arrowcurve[smooth]{0.4}{({cos(\t)*2*\i},{sin(\t)*2*\j}) ({cos(\t*3/4+22.5)*\i},{sin(\t*3/4+22.5)*\j}) (0,0)};
}
}
\end{axis}
\end{tikzpicture}
\end{document}

答案1

当您使用smooth选项时,每个点都通过贝塞尔曲线与附加控制点相互连接。在开始和结束时,其中一个控制点成为坐标本身,因此两点之间的距离为零。这会导致装饰库根据装饰类型因各种原因而抱怨。

您可以通过钥匙晚开始装修,早完成pre length,post length

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usetikzlibrary{calc,decorations.markings}

\begin{document}
\begin{tikzpicture}
    \newcommand\arrowcurve[3][]{
    \addplot[#1,
             decoration={
                 post length=1mm,
                 pre length=1mm,
                 markings,
                 mark=at position #2 with {\arrow{>}}},
             postaction={decorate}]   coordinates {#3} }

\begin{axis}[hide x axis, hide y axis]
\foreach \i/\j in {1/1,-1/1,-1/-1,1/-1} {
\foreach \t in {20,35,50,60,70,80} {
    \arrowcurve[smooth]{0.4}{({cos(\t)*2*\i},{sin(\t)*2*\j}) ({cos(\t*3/4+22.5)*\i},{sin(\t*3/4+22.5)*\j}) (0,0)};
}
}
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

我认为smooth这里滥用了选项。你浪费了一个可以精确绘制曲线的好工具。我建议对曲线进行参数化。

答案2

非常不推荐的排版方式

代码中似乎有一个错误。我手动忽略了所有错误(按住 Enter 键),结果看起来不错。我们无法使用,\nonstopmode因为有超过 100 个错误/点,这将导致没有 PDF 文件。我必须说我的答案很糟糕,我自己也不喜欢它,但它现在有效,直到有人找到更好的方法。

%! *latex mal-decorations.tex
\documentclass{article}
\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\begin{document}
\begin{tikzpicture}
\foreach \i/\j in {1/1,-1/1,-1/-1,1/-1} {
\foreach \t in {20,35,50,60,70,80} {
\draw[
  decoration={markings, mark=at position 0.4 with {\arrow{>}}}, % \node{a};
  postaction={ decorate },
  ] plot [smooth] coordinates {
           ({cos(\t)*2*\i}, {sin(\t)*2*\j}) 
           ({cos(\t*3/4+22.5)*\i}, {sin(\t*3/4+22.5)*\j)}) 
           (0,0)
    } ;
  }
}
\end{tikzpicture}
\end{document}

姆韦

相关内容