这是我的问题,假设您使用 Inkscape 将 pdf 图形转换为 tikz 代码。通常,文件很长,命令没有排序,因此如果您只想将生成的图形以东 20% 复制到另一个 tikz 图形中,您就必须浪费时间尝试找到涉及该图形这 20% 的不同代码行。
因此我的问题是,如何告诉 latex 选择另一个 tikz 图片的矩形区域。在伪代码中,这将是。
\begin{tikzpicture}
\draw[] something;
\draw copy[only x>0.8]{anotherTikzpicture.tikz};
\end{tikzpicture}
非常感谢,
答案1
因此,首先采用不切实际的路线。如果您愿意手动计算坐标,您可以稍微修改 Inkscape 的输出文件,以获得您想要的结果。假设您将其作为 Tikzpicture 导出到drawing.tikz
,则 Inkscape 中的代码将类似于
\begin{tikzpicture}[x=.... % and a bunch of other settings]
% all the paths
\end{tikzpicture}
要实现剪辑,请将其修改为类似
\begin{scope}[x=.... % and a bunch of other settings]
\clip (x1,y1) rectangle (x2,y2);
% all the paths
\end{scope}
在你想要使用它的文件中,执行
\begin{tikzpicture}
% all your other stuff
\begin{scope}[shift={(xshift, yshift)}]
\input{drawing.tikz}
\end{scope}
\end{tikzpicture}
您也可以shift
在 中进行 ing drawing.tikz
,但将其放在顶层可能更容易。这里繁琐的部分是计算剪切路径的坐标以及移位。
可能更实用
另一种方法可能是将图表放在 中\savebox
,然后将其放在 中\node
使用它,并结合scope
和\clip
。
首先将图表保存在盒子里:
\newsavebox\Diagram
\savebox{\Diagram}{\input{drawing}} % <-- input file here
这是未修改的 Inkscape 输出,仅包含tikzpicture
环境(可能还有颜色定义)。然后获取框的宽度和高度,并将它们保存为长度。
\newlength\DiagramWd
\newlength\DiagramHt
\setlength\DiagramWd{\wd\Diagram}
\setlength\DiagramHt{\ht\Diagram}
现在在您的图表中启动一个范围,并将shift
其放到适当的位置:
\begin{scope}[shift={(0,-7)}]
然后根据盒子的大小制作剪切路径。
\clip (0.8\DiagramWd,0) rectangle (\DiagramWd,\DiagramHt);
节点必须放置在框左下角 (0,0) 的位置:
\node [above right,inner sep=0] at (0,0) {\usebox\Diagram};
\end{scope}
这里唯一乏味的部分可能是制定适当的shift
方案scope
。
完整代码及示例:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\newsavebox\Diagram
\savebox{\Diagram}{\input{drawing}} % <-- input file here
\newlength\DiagramWd
\newlength\DiagramHt
\setlength\DiagramWd{\wd\Diagram}
\setlength\DiagramHt{\ht\Diagram}
\begin{document}
\begin{tikzpicture}
\node[name=a,inner sep=0,above right] {\usebox\Diagram};
\draw ($(a.south west)!0.8!(a.south east)$) rectangle (a.north east);
\draw [stealth-] ($(a.south west)!0.8!(a.south east)$) -- ++(-2,-1)
node[left] (t) {This box indicates the rightmost 20\%};
\begin{scope}[shift={(0,-7)}]
\clip (0.8\DiagramWd,0) rectangle (\DiagramWd,\DiagramHt);
\node [above right,inner sep=0] at (0,0) {\usebox\Diagram};
\end{scope}
\end{tikzpicture}
\end{document}