TikZ:将每张图片的宽度扩展至给定尺寸

TikZ:将每张图片的宽度扩展至给定尺寸

我使用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}

相关内容