是否可以合并使用不同环境创建的两个 tikz 图片?
基本上我有一个宏创建一个我经常使用的背景,但我想在它上面创建一个层,每次使用它时它都会改变,所以
\backdrop
\begin{tikzpicture}
\end {tikzpicture}
但让 tikzpicture 使用与背景中创建的相同的坐标轴、比例等和位置
(背景只是标题中提到的另一张 tikz 图片)
或者我可以嵌套图片吗?
\begin{tikzpicture}
\backdrop
\end {tikzpicture}
(我还没有尝试过看看它是否有效)
答案1
类似这样的事?
\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\newcommand{\backdrop}{
\draw (0,0) grid (5,5);
% more TikZ code
}
\begin{document}
\begin{tikzpicture}
\backdrop
\draw [thick, green] (1,1) -- (4,4);
\end{tikzpicture}\quad
\begin{tikzpicture}[xscale=2]
\backdrop
\draw [thick, red] (1,1) -- (4,4);
\end{tikzpicture}
\end{document}
当使用层时,调用的位置甚至都不重要\backdrop
:
\pgfdeclarelayer{backdrop}
\pgfsetlayers{backdrop,main}
\newcommand{\backdrop}{
\begin{pgfonlayer}{backdrop}
\fill [yellow] (2,2) rectangle (3,3);
\draw (0,0) grid (5,5);
% more TikZ code
\end{pgfonlayer}
}
答案2
很难帮助你,因为你没有提供太多的信息,也没有最小工作示例(MWE),至少可以显示你的背景是什么样子。
这是我的新建议。
使用以下类创建背景图像standalone
:
% backdrop.tex
\documentclass[border=0cm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [blue] (0,0) grid (5,5);
\end{tikzpicture}
\end{document}
backdrop.pdf
给出我们现在可以包含在主文档中的图像文件。为此,我们创建一个\backdrop
包含三个命令的命令选修的参数:
\backdrop(coordiate)[node options][graphic options]
第一个 on 接受 TikZ 坐标,如0,0
,第二个将选项传递给node
,后者将选项传递给\includegraphics
。由于所有都是可选的,因此如果您只想使用第三个参数,则必须给出一个空的第二个参数(参见下面的示例)。如果您\backdrop
在文本模式下调用,它肯定会忽略前两个参数。注意:您只能更改节点包含图像,但不是图像本身,因为它是 PDF……
\documentclass{scrartcl}
\usepackage{tikz}
\usepackage{graphicx}
\usepackage{xparse}
% define a default style for the backdrop node
\tikzset{
backdrop node/.style={%
inner sep=0pt,
outer sep=0pt,
anchor=south west,
},
}
% define the layers
\pgfdeclarelayer{backdrop}
\pgfsetlayers{backdrop,main}
% defin the command to print the backdrop image
\NewDocumentCommand{\backdrop}{D(){0,0} O{} O{}}{%
\tikzifinpicture{% inside a TikZ-Picture
\begin{pgfonlayer}{backdrop}
\node at (#1) [backdrop node,#2]
{\includegraphics[#3]{backdrop}};
\end{pgfonlayer}
}{% in normal Text
\includegraphics[#3]{backdrop}
}%
}
\begin{document}
\section*{outside}
\backdrop
\section*{inside}
\begin{tikzpicture}
\backdrop
\fill [yellow] (1,1) rectangle (2,2);
\draw [red, ultra thick] (1,1) -- (4,4);
\backdrop(6,0)
\backdrop[rotate=30]
\backdrop[][width=1cm]
\backdrop(8.5,2.5)[anchor=center][width=3cm]
\end{tikzpicture}
\end{document}
这就是结果: