当拥有tikzpicture
内部pgfplots
环境时axis
,可以观察到奇怪的效果,我猜这是由于相应的坐标系相互干扰造成的:
\begin{tikzpicture}
\begin{axis}[
xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
我的第一个想法是添加pgfplots
' 选项disabledatascaling
,但这似乎使事情变得更糟:
\begin{tikzpicture}
\begin{axis}[
disabledatascaling,
xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
实际似乎有效的是为、 和xmin
增加xmax
明确的值:ymin
ymax
\begin{tikzpicture}
\begin{axis}[
xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
xmin = -6, xmax = 6,
ymin = 0, ymax = 25,
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
但是,这仍然不是理想的,因为它迫使我 a) 明确设置这些值,并且 b) 丢失了图和轴之间的边距。所以我的问题是:有没有更好的方法来处理这种情况?
当然,这不是现实世界的例子,但内部tikzpicture
实际上可能由另一个命令绘制(并且根本不像箭头)。
完整代码:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
\bigskip
\begin{tikzpicture}
\begin{axis}[
disabledatascaling,
xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
\bigskip
\begin{tikzpicture}
\begin{axis}[
xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
xmin = -6, xmax = 6,
ymin = 0, ymax = 25,
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
看到下面的行为来揭开谜底真的很有趣
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel={A \tikz[show background rectangle]\draw[->](0,0)--++(1cm,0);
\tikz[show background rectangle]\draw[->](0,0)--++(1em,0);
\tikz[show background rectangle]\draw[->](0,0)--++(1ex,0);
\tikz[show background rectangle]\draw[->](0,0)--(1cm,0);
\tikz[show background rectangle]\draw[->](0,0)--(1em,0);
\tikz[show background rectangle]\draw[->](0,0)--(1ex,0);
B},
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
\end{document}
什么?所以我们怀疑相对定位向量和尺寸表现得很奇怪。常规尺寸没有问题。这看起来和 Gonzalo Medina 在pgfplots:使用自定义标记的图例中的问题。
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xlabel={A \tikz[show background rectangle]\draw[->](0,0)--++(1cm,0pt);
\tikz[show background rectangle]\draw[->](0,0)--++(1em,0pt);
\tikz[show background rectangle]\draw[->](0,0)--++(1ex,0pt);
B},
]
\addplot {x*x};
\end{axis}
\end{tikzpicture}
\end{document}
问题在于(我猜)使用无量纲单位,正如 Jake 在链接问题中发现的那样。那么,无论谁在那一刻负责 PGF 笔语法,都会用自己的坐标系进行解释。在 Gonzalo 的案例中,问题显而易见,但在这里,相对语法似乎导致了类似的事情(0,1)++(-1,0)
。
这里可能存在的问题是,无量纲坐标被发送到当前坐标系\pgf@process
,并且该坐标由当前坐标系解释。当我们添加单位时,坐标不会乘以当前单位向量x,y
,结果符合预期。
像往常一样,引用 Andrew Stacey 的话,嵌套 TikZ 图片不是一个好主意:)