旧答案

旧答案

我希望在同一文档中包含 pgf 生成的线图和 tikz 生成的图形模型。但是,该pgfplots包的存在(环境所需axis)似乎使图形模型中的某一层变得不可见,如以下几乎最小的示例所示:

\documentclass{article}
\usepackage{pgfplots}
\usepackage{tikz}

\pgfdeclarelayer{f}
\pgfsetlayers{main,f}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
        \addplot coordinates {(1, 5)(2, 10)};
        \end{axis}
    \end{tikzpicture}

    \begin{tikzpicture}
        \node (a) [draw, circle, minimum size=40pt] {$a$};
        \begin{pgfonlayer}{f}
            \node (plate) [draw, minimum size=60pt] {};
        \end{pgfonlayer}
    \end{tikzpicture}
\end{document}

我想要绘制的是一个简单的线图,后面跟着一个矩形板内的圆形节点。最终绘制的是一个简单的线图,后面跟着一个圆形节点,没有矩形板。基本上,导入f时图层似乎消失了。这在和中都会发生。pgfplotsLaTeXXeTeX

需要注意的是,第一个tikzpicture环境使这个示例不完整。可以删除它,只需注释或取消注释该\usepackage{pgfplots}行即可切换层的不可见性。但是,我保留了它,因为它说明了我的用例。

我怎样才能同时使用axis环境pgfplots和在图形模型中添加第二层?有什么想法?解决方法?解释一下?

答案1

更新:这是一个错误。目前pgfplots1.7 版本已经修复了这个问题。

以下代码有效并给出预期的输出。

代码

\documentclass{article}
\usepackage{pgfplots}
\pgfdeclarelayer{f}
\pgfsetlayers{main,f}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
        \addplot coordinates {(1, 5)(2, 10)};
        \end{axis}
    \end{tikzpicture}

    \begin{tikzpicture}
        \node (a) [draw, circle, minimum size=40pt] {$a$};
        \begin{pgfonlayer}{f}
            \node (plate) [draw, minimum size=60pt] {};
        \end{pgfonlayer}
    \end{tikzpicture}
\end{document}

输出

输出更新

旧答案

这是一个错误。

之前建议的代码\usepackage{pgfplots}可以工作。

\ifx\pgfplothandlerjumpmarkmid\undefined
  \def\pgfplothandlerjumpmarkmid{123}
\fi

环境中仍存在“未定义控制序列”错误axis— 错误报告者的代码中不存在该错误。(不过,这些错误消息似乎对输出没有任何影响)。

为了摆脱它们,我定义了另外三个宏加载中pgfplots

\if-clause 仅用于检查宏是否真的没有定义。{123}只是任何使它们定义的任意事物,可以是,{42}甚至是{}相反。)

我建议您使用最新的 pgfplots 不稳定版本(上面链接的错误跟踪器中最新评论中的第二个选项)!

代码

\documentclass{article}
\ifx\pgfplothandlerjumpmarkmid\undefined
  \def\pgfplothandlerjumpmarkmid{123}
\fi
\ifx\pgfplothandlerconstantlinetomarkmid\undefined
  \def\pgfplothandlerconstantlinetomarkmid{123}
\fi
\makeatletter
\ifx\pgf@remember@layerlist@globally\undefined
  \def\pgf@remember@layerlist@globally{123}
\fi
\ifx\pgf@restore@layerlist@from@global\undefined
  \def\pgf@restore@layerlist@from@global{123}
\fi
\makeatother
\usepackage{pgfplots}
\pgfdeclarelayer{f}
\pgfsetlayers{main,f}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}
        \addplot coordinates {(1, 5)(2, 10)};
        \end{axis}
    \end{tikzpicture}

    \begin{tikzpicture}
        \node (a) [draw, circle, minimum size=40pt] {$a$};
        \begin{pgfonlayer}{f}
            \node (plate) [draw, minimum size=60pt] {};
        \end{pgfonlayer}
    \end{tikzpicture}
\end{document}

相关内容