如何使用独立或预览包进行更智能的裁剪?

如何使用独立或预览包进行更智能的裁剪?

左下角的箭头尾部未正确裁剪。

在此处输入图片描述

\documentclass[tikz,border=0pt]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[scale=3,line width=3pt]
\draw[red] (0,0) grid (1,1);
\draw[blue,|->] (0,0) -- (1,1);
\end{tikzpicture}
\end{document}

在不改变border选项的情况下,如何使用standalonepreview包进行更智能的裁剪?

答案1

正如 Martin Scharrer 指出的那样,preview或者standalone类将 Tikz 图片视为黑框,其大小由 TikZ 边界框报告。因此,只有 TikZ 内部才能计算正确的框。

但是,箭头和线连接伪影不会影响边界框计算,而且我不知道如何快速修复此问题。示例:

\documentclass[tikz,border=0pt]{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[scale=3,line width=3pt]
\draw[red] (0,0) grid (1,1);
\draw[blue,|->] (0,0) -- (1,1);
\draw[line join=miter] (1,1) -- (0,0.5) -- (1,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

您可以手动更改边界框以包含缺失的细节,例如

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[scale=3,line width=3pt]
\draw[red] (0,0) grid (1,1);
\draw[blue,|->] (0,0) -- (1,1);
\draw[line join=miter] (1,1) -- (0,0.5) -- (1,0);
\useasboundingbox ([shift={(-0.5\pgflinewidth,-0.5\pgflinewidth)}]current 
bounding box.south west) -- (current bounding box.north east);
\end{tikzpicture}
\end{document}

在此处输入图片描述

请注意,每个自定义图片的移位量都应更改,我只是在这里使用了快捷方式。

答案2

不要使用 documentclass standalone。创建一个默认pdf输出,然后pdfcrop在该文件上运行。创建的<file>-crop.pdf具有正确的边界框。该示例需要pdflatex -shell-escape <file>运行两次:

\documentclass{minimal}
\usepackage{graphicx,tikz}
\pagestyle{empty}
\begin{document}

\IfFileExists{\jobname-crop.pdf}
  {\typeout{Delete \jobname-crop.pdf}%
   \immediate\write18{rm -f \jobname-crop.pdf}}
  {\IfFileExists{\jobname.pdf}
    {\immediate\write18{pdfcrop \jobname}}
    {\typeout{we need one more pdflatex run with option -shell-escape!}}
  }
\IfFileExists{\jobname-crop.pdf}
  {\frame{\includegraphics{\jobname-crop.pdf}}}
  {%
   \begin{tikzpicture}[scale=3,line width=3pt]
   \draw[red] (0,0) grid (1,1);
   \draw[blue,|->] (0,0) -- (1,1);
   \end{tikzpicture}%
}
\end{document}

在此处输入图片描述

答案3

直到 Tantau 解释道只需包含arrows.meta库即可解决问题。边界框会调整以包含箭头尖端和尾部。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\begin{document}
\begin{tikzpicture}[scale=3,line width=3pt]
\draw[red] (0,0) grid (1,1);
\draw[blue,|->] (0,0) -- (1,1);
\draw[line join=miter] (1,1) -- (0,0.5) -- (1,0);
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案4

TikZ CVS 的最新更新现在支持将箭头纳入边界框。因此,现在可以独立智能裁剪 TikZ 图片。

根据功能请求,尚未记录但可用。

相关内容