问题:tikz、pgfplots 和使用覆盖的外部坐标

问题:tikz、pgfplots 和使用覆盖的外部坐标

我需要pgfplots使用 从文本到图形绘制箭头TikZ。由于某种原因,箭头坐标不在我希望它们在图形中的位置pgfplots。以下是一个例子:

\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}

\pgfplotsset{width=7cm}

\begin{document}

Text \tikz[remember picture] \node[circle,fill=red!50] (n1) {}; text.
\vspace{1in}

\pgfplotsset{domain=-1:1}
\begin{tikzpicture}
  \begin{axis}[remember picture,xlabel=A normal sized $x$ label]
    \addplot[smooth,blue,mark=*] {x^2};
    \node (c) at (axis cs:0,0.5) {$a$};
  \end{axis}
\end{tikzpicture}
\vspace{1in}

Text \tikz[remember picture] \node[fill=blue!50] (n2) {}; text.

\begin{tikzpicture}[remember picture,overlay]
  \draw [->,red,very thick] (n1) -- (n2);
  \draw [overlay,->,very thick] (c) -- (n2);
\end{tikzpicture}

\end{document}

字母“a”似乎位于 处的正确位置(0,0.5),但黑色箭头的起点却不正确。它似乎太靠右了。

红色箭头pgfplots似乎是正确的,它没有使用图表定义。

是否存在我遗漏的选项?

感谢您的任何帮助!

答案1

这似乎是 pgfplots 中的一个错误,我会处理它。

虽然我没有看到错误,但我可以说如何在错误修复准备好之前避免该问题 - 前提是你正在运行 pgfplots 1.6.1(最新的稳定版本):

添加

\pgfplotsset{cell picture=if necessary}

到你的序言(或\begin{axis}[..., cell picture=if necessary]选定的轴)将修复它。

注意力:在这种情况下,您需要remember picture从移动\begin{axis}\begin{tikzpicture}

您也可以说cell picture=false。在这种情况下,如果 pgfplots 确实需要初始设置(正如cell picture=true您可能已经猜到的那样),您将收到错误消息。


技术说明:

我发现这与 pgfplots 创建所谓的“单元格图片”并移动它以实现其定位选择(锚点)的事实有某种关系。单元格图片意味着它会\tikzpicture...\endtikzpicture在内部创建一个额外的图片,就像 pgf 矩阵一样。

初始值cell picture=true主要是为了向后兼容。一般来说,避免使用单元格图片有好处。它们是必要的如果你选择一个不在列表中的锚点

北、西北、西、西南、南、东南、东、东北、北、中心、原点、原点上方、原点左侧、原点右侧、原点下方。

例如,选择anchor=above north需要一张手机图片。


编辑2016 年 7 月

@Elmar 指出该问题尚未完全解决,并提供了最简单的例子

%compile with: pdflatex -shell-escape main && make -f main.makefile && pdflatex main
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzset{external/export=false, external/mode=list and make}
\tikzexternalize
\pgfplotsset{compat=1.13}
\begin{document}
    \tikz[remember picture] \node {X};
    \tikzset{external/export=true}
    \begin{tikzpicture}
        \begin{axis}[clip=false]
            \addplot {x};
            \node (A) at (yticklabel cs:0.5) {A};
        \end{axis};
        \node at (A) {B};
    \end{tikzpicture}
\end{document}

他说得有道理——问题仍然存在。在他的例子中,问题是由文件中main.aux引用“记住的位置”的条目引起的——它意外地与第二幅图像相关联。

我会调查一下。目前,解决办法似乎是不是优化第一张图片,因为这将在外部化图形时产生正确的内部图片标识符:

%compile with: pdflatex -shell-escape main && make -f main.makefile && pdflatex main
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzset{external/export=false, external/mode=list and make}
\tikzexternalize
\pgfplotsset{compat=1.13}
\begin{document}
    {\tikzset{external/optimize=false}%
    \tikz[remember picture] \node {X};
    }%
    \tikzset{external/export=true}
    \begin{tikzpicture}
        \begin{axis}[clip=false]
            \addplot {x};
            \node (A) at (yticklabel cs:0.5) {A};
        \end{axis};
        \node at (A) {B};
    \end{tikzpicture}
\end{document}

相关内容