我使用pgf
/创建图TikZ
,将其外部化,然后将它们包含到另一个预定义的 LaTeX 文档中(其他人会这样做,所以我无法更改那里的任何内容)。最终文档具有两列布局,所有图像将缩放到 80mm 的宽度(= 1 列宽)。
当我创建TikZ
图片并将其外部化时,生成的 pdf 被很好地裁剪了。但是,在我的例子中,我需要所有图片的宽度正好是 80 毫米。我不想缩放图片,而是将它们分别放在 80 毫米宽的画布上。
我想到了一个解决方案,使用当前图片的边界框并将其放大到我需要的程度。以下是一个例子:
\documentclass{article}
\usepackage{color,pgf,tikz}
\usetikzlibrary{calc,external}
\tikzexternalize
% define column size (= image width)
\newlength{\singlecol}
\setlength{\singlecol}{80mm}
% set bounding box for each picture, i.e. expand to image width/column size
\tikzset{singpic/.append style={
execute at end picture={
\coordinate (BBCorner1) at ($ (current bounding box.south) + (-0.5*\singlecol,0) $);
\coordinate (BBCorner4) at ($ (current bounding box.north) + (0.5*\singlecol,0) $);
\path[use as bounding box, draw, blue] (BBCorner1) rectangle (BBCorner4);
}
}
}
\begin{document}
\begin{tikzpicture}[singpic]
\filldraw[fill=yellow!20] (0,0) rectangle (5,5) node[midway] {The Picture};
\draw[red, thick] (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\end{document}
因此这可以按预期工作,但是有没有更优雅的方法来做到这一点?
答案1
我认为这是一个非常好的方法。简化代码的小建议:
的效果[use as bounding box]
是将边界框固定在您提供选项的路径之后的大小,因此稍后指定的任何路径都不会进一步增加边界框。由于您在图片的最末端指定路径,因此该选项在这种情况下不起作用。请注意,[use as bounding box]
不会减小边界框大小。如果您希望图片的边界框在所有情况下都与路径的边界框匹配,则必须\pgfresetboundingbox
先发出。
另外,您不必先定义坐标,然后在它们之间定义一个矩形来获取正确的边界框。相反,您可以直接指定两点之间的路径:
\documentclass{article}
\usepackage{tikz} % TikZ loads PGF and color automatically
\usetikzlibrary{calc,external}
% define column size (= image width)
\newlength{\singlecol}
\setlength{\singlecol}{80mm}
% set bounding box for each picture, i.e. expand to image width/column size
\tikzset{
singpic/.append style={
execute at end picture={
\path [draw] ($ (current bounding box.south) + (-0.5*\singlecol,0) $) -- +(\singlecol,0);
}
}
}
\begin{document}
\begin{tikzpicture}[singpic]
\filldraw[fill=yellow!20] (0,0) rectangle (5,5) node[midway] {The Picture};
\draw[red, thick] (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\end{document}