为什么编译时无法识别“\arrow”命令?

为什么编译时无法识别“\arrow”命令?

我不明白为什么会出现这个问题,因为我仍然可以正常编译。我正在尝试重新创建一个图表。除了图表中的箭头外,一切都正常。我正在使用 TexStudio 和 MikTex。

在此处输入图片描述

以下是我正在使用的 LaTex 代码:

\documentclass[dvipsnames]{article}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\usetikzlibrary{decorations.markings,arrows}
\pgfplotsset{compat=newest}

\def\Point{36.9}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
view={-30}{-30},
axis lines=middle,
zmax=60,
height=12cm,
xtick=\empty,
ytick=\empty,
ztick=\empty
]
\addplot3+[,ytick=\empty,yticklabel=\empty,
mark=none,
thick,
BrickRed,
domain=0:14.7*pi,
samples=400,
samples y=0,
]
({x*sin(0.28*pi*deg(x))},{x*cos(0.28*pi*deg(x)},{x});
\addplot3+[
mark options={color=MidnightBlue},
mark=*
] 
coordinates {({\Point*sin(0.28*pi*deg(\Point))},{\Point*cos(0.28*pi*deg(\Point)},{\Point})};
\addplot3+[
mark=none,
dashed,
domain=0:12*pi,
samples=100,
samples y=0
]  
({\Point*sin(0.28*pi*deg(\Point))},{\Point*cos(0.28*pi*deg(\Point)},{x});
\addplot3[
mark=none,
dashed
]
coordinates {(0,0,0) ({\Point*sin(0.28*pi*deg(\Point))},{\Point*cos(0.28*pi*deg(\Point)},{0})};

\draw[
radius=80,
decoration={
    markings,
    mark= at position 0.99 with {\arrow{latex}}
},
postaction=decorate
] 

(axis cs:0,10,0) arc[start angle=80,end angle=14] (axis cs:14,0,0);
\node at (axis cs:20,0,30) {$P$};
\node at (axis cs:20,17,0) {$\rho$};
\node at (axis cs:24,0,7) {$z$};
\node at (axis cs:7,12,0) {$\phi$};
\end{axis}
\end{tikzpicture}

\end{document}

先感谢您。

答案1

我看这个问题已经有一段时间了,但我会满足要求并尝试根据上面的评论写一个答案。请注意,我无法重现原始问题,所以我不确定我的答案是否正确。

这里的问题不在于\arrow命令,而在于箭头所在的路径:

\draw[
radius=80,
decoration={
    markings,
    mark= at position 0.99 with {\arrow{latex}}
},
postaction=decorate
] 

(axis cs:0,10,0) arc[start angle=80,end angle=14] (axis cs:14,0,0);

此路径从 (0,10) 开始,绘制一个圆弧,然后跳转到 (14,0)(不绘制)。当您使用常规-latex选项告诉它在路径上放置箭头时,它会尝试将其放在最后一段上,即单个点。因此,箭头不仅放在错误的位置,而且它不知道该往哪个方向走。[实际上,我没有看到标记有这种行为,即使有at position 1。我不确定为什么没有。] 似乎有人试图通过将箭头放在路径上来解决这个问题几乎在路径的末尾,但这看起来也不太好。由于最后一个点没有做任何事情,正确的修复方法可能是将其从路径中完全删除:

\draw[
radius=80,
decoration={
    markings,
    mark= at position 1 with {\arrow{latex}}
},
postaction=decorate
] 

(axis cs:0,10,0) arc[start angle=80,end angle=14];

这也不是很好,因为它不会缩短弧线来为箭头让路。相反,你应该使用

\draw[radius=80, -latex] (axis cs:0,10,0) arc[start angle=80, endangle=14];

或者用更简单的符号

\draw[-latex] (axis cs:0,10,0) arc (80:14:80);

[实际上,在我看来,你确实想画一条不同的弧线,比如

\draw[-latex] (90:10) arc (90:30:10);

在 y 轴(90 度)和虚线之间绘制一个半径为 10 的圆弧,在轴坐标的 xy 平面中axis cs:。由于它是默认的,因此所有坐标之前的坐标似乎都是多余的。]

相关内容