\tikz
在环境中使用该命令时tikzpicture
,内容的定位会改变。
以下是两个例子:
负责的代码如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,shapes.multipart}
\begin{document}
Here we have a
\begin{tikzpicture}[show background rectangle]
\node[draw, rectangle split, rectangle split parts=2] at (0,0)
{ foo%
\nodepart{two}
bar
};
\end{tikzpicture} picture.
Here we have a
\begin{tikzpicture}[show background rectangle]
\tikz{
\node[draw, rectangle split, rectangle split parts=2] at (0,0)
{ foo%
\nodepart{two}
bar
};
}
\end{tikzpicture}
picture.
\end{document}
第二个例子中节点的左下角正好位于图片的中间,所以它出现在那里一定有很好的理由。:-) 哪一个?
答案1
您无法\tikz
在tikzpicture
这样的环境中使用。我不知道您想做什么,也不知道是什么让您认为您可以这样做。
命令\tikz
是环境的简写tikzpicture
。在环境中直接使用它与在环境中tikzpicture
使用环境一样有意义!tikzpicture
tikzpicture
所以你的第二张图片基本上是:
\begin{tikzpicture}[show background rectangle]
\begin{tikzpicture}
\node[draw, rectangle split, rectangle split parts=2] at (0,0)
{ foo%
\nodepart{two}
bar
};
\end{tikzpicture}
\end{tikzpicture}
仍然想知道为什么这不能给你带来好的结果吗?
唯一令人惊讶的是,两者都没有引发错误消息!(这应该作为错误报告发送给开发人员。)
您无法在 内安全地使用任意常规排版命令tikzpicture
。它的所有内容都放置在一个虚拟 TeX 框中,该框随后会被丢弃,而绘图命令会将其材料添加到第二个框中,然后进行排版。尝试在图片中添加一些文本而不添加任何其他内容。TikZ 会忽略它。但是,您可以安全地在节点内容内使用\tikz
或tikzpicture
。TikZ 会在处理节点内容时小心地中断当前图片。
我现在可以推测为什么你会得到与你完全相同的输出,但这很重要。显然,大小/边界框仍然存在,但位置是。
如果您希望能够在节点内部和外部使用绘图代码,您可以tikzpicture
通过测试例如是否\path
具有其正常的 TikZ 定义来查看您当前是否在节点内部。请注意,在排版节点内容时,TikZ 会将其自己的命令恢复为先前的定义。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,shapes.multipart}
\makeatletter
% Ensures processing of content inside a `tikzpicture` (using the short version `\tikz`)
\newcommand{\ensuretikz}{%
\ifx\path\tikz@command@path
\expandafter\@firstofone
\else
\expandafter\tikz
\fi
}
\makeatother
\begin{document}
Here we have a
\begin{tikzpicture}[show background rectangle]
\node {
\ensuretikz{%
\node[draw, rectangle split, rectangle split parts=2] at (0,0)
{ foo%
\nodepart{two}
bar
};
}
};
\end{tikzpicture} picture.
Here we have a
\begin{tikzpicture}[show background rectangle]
\ensuretikz{
\node[draw, rectangle split, rectangle split parts=2] at (0,0)
{ foo%
\nodepart{two}
bar
};
}
\end{tikzpicture}
picture.
\end{document}
答案2
我在提问之前找到了这个问题 这个
我不明白为什么 tikzpicture 里面有一个 tikzpicture 是错误的,我明白这可能很奇怪或者非常奇怪但有一些链接环境的例子。
我意识到使用 pgfornament 包是可能的,但我们需要小心。Till Tantau 想到了这一点\tikzifinpicture
(参见问题
如何检查... 好吧,这可能是一个错误的想法,但它确实有效,尽管有 Tantau 的评论
% TT:这是一个错误的测试!谁会用这个?...
现在问题很简单:你在 tikz 的图片中,然后你创建了一个新图片(tikz 或非 tikz)。此图片放置在当前点,这里是矩形的中心,默认情况下,图片放置在西南锚点处,如下例所示:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,shapes.multipart}
\begin{document}
Here we have \tikz{%
\node[draw, rectangle split, rectangle split parts=2] at (0,0)
{ foo%
\nodepart{two}
bar
};
} and \tikz[baseline=(current bounding box.center)]{
\node[anchor=west,draw, rectangle split, rectangle split parts=2] at (0,0)
{ foo%
\nodepart{two}
bar
};
} picture.
\end{document}
对于你的情况,你需要做同样的事情:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,shapes.multipart}
\begin{document}
Here we have a
\begin{tikzpicture}[show background rectangle]
\tikz[baseline=(x.center)]{
\node[anchor=west,draw, rectangle split, rectangle split parts=2] (x) at (0,0)
{ foo%
\nodepart{two}
bar
};
}%
\end{tikzpicture}
picture.
\end{document}