TikZ:`用作边界框`的替代方案?或者在外部图片中处理它的另一种方法?

TikZ:`用作边界框`的替代方案?或者在外部图片中处理它的另一种方法?

我一直在使用 TikZ 为我的物理课程等绘制图形(pgfplots)和图片。

因为我喜欢(例如)图形框位于页面中央而不查看随之而来的内容(ylabel,,yticks等等),所以我像这样在上面画一个矩形:

\draw[draw=none, use as bounding box](0,0) rectangle (\figurewidth,\figureheight);

这样,在将图形放置在页面上时只需考虑图形的框。

这种方法对我来说很有效,我已经多次应用过它。但是,我在使用该库时似乎遇到了麻烦externalize。由于创建的外部图形在边缘处被切断bounding box,我丢失了外面的所有内容(没有externalize这种情况就不会发生,一切都被绘制了)。

我看到了两种可能的解决方案:

  1. 使用另一个命令使居中正确,例如:

    \draw[center on this, draw=none](0,0)rectangle(\figurewidth, \figureheight);
    
  2. 告诉external包裹不要夹在bounding box

有任何想法吗?

答案1

external由于您所描述的问题,您无法在库中使用“真实”边界框。您需要做的是使用trim lefttrim rightbaseline命令根据您的要求移动图片。

来自手册,第 168 页:

请注意baselinetrim lefttrim right是目前唯一支持的与图像外部化兼容的截断边界框方式(有关详细信息,请参阅外部库)。

有了pgfplots,您可以非常舒适地将其用作环境[trim axis left,trim axis right]选项tikzpicture

例如,可以使用 使其他图片居中[trim left,trim right=0pt],将图片修剪为通过原点的垂直线。

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.3}
\usetikzlibrary{external}
\tikzexternalize
\tikzset{external/force remake}

\begin{document}
\centering
The following 'x' marks the center of the page:

x

\begin{tikzpicture}[trim left,trim right=0pt]
  \node (root) {root} child {node {left}} child {node {right}
  child {node {child}}
  child {node {child}} };

\end{tikzpicture} 

% With trim axis
\begin{tikzpicture} [trim axis left,trim axis right]
\begin{axis}[width=5cm,ylabel=looong label,ylabel style={rotate=-90}]
\addplot {x^2};
\end{axis}
\end{tikzpicture}

\end{document}

以有用点为中心的树和图

答案2

作为方法的通用版本1,您可以添加

\path ($(current bounding box.east)!2!(center |- current bounding box.east)$);
\path ($(current bounding box.west)!2!(center |- current bounding box.west)$);

在图像的末尾,只要您(center)之前指定一个点。

此解决方案需要\usetikzlibrary{calc}。使用此方法,从当前东部向中心绘制一条不可见的线,但长度是其两倍,从而在左侧生成一个点。从西侧绘制另一条不可见的线。最后,边界框的宽度是距离中心最远的点的两倍,从而产生对称性。

相关内容