TikZ 外部:图形被裁剪

TikZ 外部:图形被裁剪

以下 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 lefttrim rightbaseline来撤消 的效果\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}

相关内容