为什么 pgfplots 的“当前绘图样式”即使有效也会引发错误?

为什么 pgfplots 的“当前绘图样式”即使有效也会引发错误?

我设法用 pgfplots 和 Ti 制作了下图Z:

LaTeX 输出:三个热力学过程的 pV 图

这正是我想要的效果。以下 M(-ish)WE 重现了该图:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\pagenumbering{gobble}

\begin{document}

\begin{tikzpicture}
  \begin{axis}[
      xmin=0, xmax=1,
      ymin=0, ymax=1,
      enlargelimits=true,
      xtick=\empty, ytick=\empty,
      xlabel={$V$},
      ylabel={$p$},
      axis lines=middle,
      domain=0:1,
      variable=\t,
      no marks,
      samples=24,
      smooth,
    ]
    %
    % Isochoric process, halving temperature
    \addplot (0.25, 0.75-0.5*t);
    \begin{scope}[current plot style]
      \fill (axis cs:0.25, 0.25) circle (2pt) node[below] {isochoric};
    \end{scope}
    %
    % Isothermal process, halving pressure
    \addplot (0.1875/(0.75-0.5*t), 0.75-0.5*t);
    \begin{scope}[current plot style]
      \fill (axis cs:0.75, 0.25) circle (2pt) node[below] {isothermal};
    \end{scope}
    %
    % Isobaric process, doubling volume
    \addplot (0.25+0.25*t, 0.75);
    \begin{scope}[current plot style]
      \fill (axis cs:0.5, 0.75) circle (2pt) node[below] {isobaric};
    \end{scope}
    %
    \fill[black] (axis cs:0.25, 0.75) circle (2pt) node[above] {initial state};
  \end{axis}
\end{tikzpicture}


\end{document}

我使用scopes 使点和标签(等容、等压、等温)具有与最新图相同的颜色。我喜欢这种方法,因为它在数学上很优雅(时间参数化,而不仅仅是\drawing),并且我可以使用 pgfplots 的循环列表,而不必明确指定任何颜色。

但是,尽管输出正确,我还是收到以下错误消息三次:

! Package pgfkeys Error: I do not know the key '/tikz/current plot style' and I
 am going to ignore it. Perhaps you misspelled it.

See the pgfkeys package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.28     \begin{scope}[current plot style]

如果我删除scopes 或它们的参数,错误就会消失,但标签会变成黑色。

这是否与 pgfplots 手册(第 4.3 节“命令\addplot:坐标输入”;第 42 页)中的声明有关,即“current plot style只要路径尚未完成或未包含在相关误差线中,图例选项‘可用作 ’”?我不确定这是否意味着整个current plot style样式仅在这种情况下可用,或者只是图例条目被限定为这样。

无论如何,我该怎么做才能纠正这个错误?

答案1

我不知道为什么当将 keycurrent plot style作为选项给出时会产生错误scope。据我所知,它应该可以正常工作,尤其是考虑到我的其余答案。

但是(我认为这更优雅)它如果只是将其作为选项添加到 each 中\fill,则有效,如下所示:

\fill[current plot style] (axis cs:0.25, 0.25) circle (2pt) node[below] {isochoric};

这是完整的代码,编译时没有错误:

\documentclass[border=2pt]{standalone}

\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{tikzpicture}
  \begin{axis}[
      xmin=0, xmax=1,
      ymin=0, ymax=1,
      enlargelimits=true,
      xtick=\empty, ytick=\empty,
      xlabel={$V$},
      ylabel={$p$},
      axis lines=middle,
      domain=0:1,
      variable=\t,
      no marks,
      samples=24,
      smooth,
    ]
    %
    % Isochoric process, halving temperature
    \addplot (0.25, 0.75-0.5*t);
    \fill[current plot style] (axis cs:0.25, 0.25) circle (2pt) node[below] {isochoric};
    %
    % Isothermal process, halving pressure
    \addplot (0.1875/(0.75-0.5*t), 0.75-0.5*t);
    \fill[current plot style] (axis cs:0.75, 0.25) circle (2pt) node[below] {isothermal};
    %
    % Isobaric process, doubling volume
    \addplot (0.25+0.25*t, 0.75);
    \fill[current plot style] (axis cs:0.5, 0.75) circle (2pt) node[below] {isobaric};
    %
    \fill[black] (axis cs:0.25, 0.75) circle (2pt) node[above] {initial state};
  \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容