以下 MWE 的箭头在外部化时会被裁剪。我做错了什么?
梅威瑟:
\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
\draw[->,ultra thick] (0,0) -- (0,5);
\draw[->,ultra thick] (0,0) -- (5,0);
\end{tikzpicture}
\end{document}
答案1
这确实很糟糕。至少对于 pdf 输出来说是这样(生成的图像边界框也用于裁剪图像)。对于 ps 输出来说可能效果更好(我不知道)。
我猜唯一的解决办法是手动增加边界框的大小。在你的例子中,你可以使用
\useasboundingbox (-0.2,-0.2);
作为最后的语句(否则它将覆盖整个边界框)。在我们的例子中,我们只是将 (-0.2,-0.2) 坐标“附加”到图片的边界框。
当然,这会改变图像的边界框。这可能就是你想要的。如果不是,你可能会对答案的以下部分感兴趣。
解决方案保持当前的边界框将依靠trim left
、trim right
和baseline
来撤消 的效果\useasboundingbox
。
这是一种可能的方法:
\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize
\begin{document}
\thispagestyle{empty}
\fboxsep=0pt
\dotfill
\fbox{%
\begin{tikzpicture}[trim left=0pt,trim right=5cm,baseline]
\draw[->,ultra thick] (0,0) -- (0,5);
\draw[->,ultra thick] (0,0) -- (5,0);
\useasboundingbox (-0.2,-0.2);
\end{tikzpicture}%
}
\dotfill
\end{document}
正如您所猜想的那样,\fboxsep
、\dotfill
和\fbox
等只是语法糖,用于验证其是否有效。 关键思想是trim left,trim right,baseline
与 相结合\useasboundingbox
。
前两个键允许修改图片的边界框,第三个键控制垂直位移。但是,与external
库生成的“紧密”边界框不同,生成的图像具有更大边界框比修剪值更大。修剪值通过负值实现\hspaces
,也由库应用external
。该baseline
事物只是垂直移动整个图像;这似乎足够了。
答案2
这是一个添加一些边距(此示例中为 2 毫米)的简单方法tikzpicture
:
\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{external,fit}
\tikzexternalize
\begin{document}
\begin{tikzpicture}
\draw[->,ultra thick] (0,0) -- (0,5);
\draw[->,ultra thick] (0,0) -- (5,0);
\node[fit=(current bounding box),inner sep=2mm]{};
\end{tikzpicture}
\end{document}