我一直在使用 TikZ 为我的物理课程等绘制图形(pgfplots)和图片。
因为我喜欢(例如)图形框位于页面中央而不查看随之而来的内容(ylabel
,,yticks
等等),所以我像这样在上面画一个矩形:
\draw[draw=none, use as bounding box](0,0) rectangle (\figurewidth,\figureheight);
这样,在将图形放置在页面上时只需考虑图形的框。
这种方法对我来说很有效,我已经多次应用过它。但是,我在使用该库时似乎遇到了麻烦externalize
。由于创建的外部图形在边缘处被切断bounding box
,我丢失了外面的所有内容(没有externalize
这种情况就不会发生,一切都被绘制了)。
我看到了两种可能的解决方案:
使用另一个命令使居中正确,例如:
\draw[center on this, draw=none](0,0)rectangle(\figurewidth, \figureheight);
告诉
external
包裹不要夹在bounding box
有任何想法吗?
答案1
external
由于您所描述的问题,您无法在库中使用“真实”边界框。您需要做的是使用trim left
、trim right
和baseline
命令根据您的要求移动图片。
来自手册,第 168 页:
请注意
baseline
,trim left
和trim 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}
。使用此方法,从当前东部向中心绘制一条不可见的线,但长度是其两倍,从而在左侧生成一个点。从西侧绘制另一条不可见的线。最后,边界框的宽度是距离中心最远的点的两倍,从而产生对称性。