Pgfplots 标签被 tikz 间谍库重复

Pgfplots 标签被 tikz 间谍库重复

我的问题非常类似问题。我在图中标记了某条曲线,并放大了其中的一部分。该\spy命令重复执行\label,这会导致multiply defined令人讨厌的标签警告。

链接问题中提出的解决方案不适用于我的示例,因为我无法命名以后可以参考的节点。

我怎样才能停止\spy重复标签pgfplot

 \documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}

\usetikzlibrary{spy}

\begin{document}


\begin{tikzpicture}[spy using outlines={circle, magnification=2, size=1cm,
connect spies}]
 \begin{axis}
  \addplot{x^2 - x +4};\label{plot:curve}
 \end{axis}
\begin{scope}
   \spy[green!30!black,size=1cm] on (3,.85) in node [fill=white] at (4,2);
\end{scope}
\end{tikzpicture}

 \ref{plot:curve}
\end{document}

答案1

\label每当 a依赖于要标记的项目的上下文时,就会出现问题。在这种情况下,pgfplots提供自己的标签功能。这反过来最终归结为标准 LaTeX\label命令。

标准 LaTeX 的\label结果是\write{....}(将一些内容写入文件.aux)。

\write是与库结合的“问题” spyspy库将其所有内容收集到一个 TeX 框中,并将其排版两次。A也是该框的一部分,每次使用该框时都会执行(据我所知和所见)。解决方案是在此上下文中\write使用\immediate\write而不是。\write


** 编辑:** 这个答案很草率;下面建议的解决方案可能休息链接:虽然我上面的分析似乎是正确的,但下面提出的解决方案可能没有我声称的那么有用。昨天晚上晚些时候,我没有想到最重要的问题:为什么有人推迟写入吗!?当然,他这样做是因为标签机制用于在标记项和引用之间建立联系。通常,这需要标记项排版的页码。而这又只能使用延迟写入来检索。

也许你仍然可以使用我的 pgfplots 破解方法,因为在那里,你不想知道页码 - 你想要小图例图像。那应该可以。但是,我的破解方法可能会(?)破坏超链接。

但解决方案显然是错误的对于其他任何情况\label,因为它会破坏较大文档的页码信息。

自行承担使用风险。


您可以\write按照以下示例临时替换该功能 - 并且它将起作用(对于每个\label,而不仅仅是pgfplots):

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}

\usetikzlibrary{spy}

\newenvironment{writereplace}{%
    \begingroup
    \let\writeold=\write
    \def\write{\immediate\writeold}%
}{%
    \endgroup
}%

\begin{document}



\begin{writereplace}
\begin{tikzpicture}[spy using outlines={circle, magnification=2, size=1cm,
connect spies}]
 \begin{axis}
  \addplot{x^2 - x +4};\label{plot:curve}
 \end{axis}
\begin{scope}
   \spy[green!30!black,size=1cm] on (3,.85) in node [fill=white] at (4,2);
\end{scope}
\end{tikzpicture}
\end{writereplace}

 \ref{plot:curve}
\end{document}

相关内容