我希望在同一文档中包含 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
时图层似乎消失了。这在和中都会发生。pgfplots
LaTeX
XeTeX
需要注意的是,第一个tikzpicture
环境使这个示例不完整。可以删除它,只需注释或取消注释该\usepackage{pgfplots}
行即可切换层的不可见性。但是,我保留了它,因为它说明了我的用例。
我怎样才能同时使用axis
环境pgfplots
和在图形模型中添加第二层?有什么想法?解决方法?解释一下?
答案1
更新:这是一个错误。目前pgfplots
1.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}