可能更实用

可能更实用

这是我的问题,假设您使用 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}

相关内容