一种解决方法是单独使用pdfcrop
(在终端中)来裁剪我们要导入的 PDF 文件。
但是 - 有没有办法在从tex
文件内部导入 PDF 文件时去除白边?
导入 PDF 文件的两个常见包是pdfpages
或。我可以使用文件内的graphicx
“预处理”文件吗?pdfcrop
tex
答案1
一个新的命令,其工作原理类似\includegraphics
,但会裁剪 pdf 图像:
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
记住: \write18
需要启用。对于大多数 TeX 发行版,请--shell-escape
在运行latex
/pdflatex
等时设置该标志。
例子
\documentclass{article}
\usepackage{graphicx}
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
\begin{document}
\includeCroppedPdf[width=\textwidth]{test}
\end{document}
避免每次编译时都进行裁剪
为了避免在每次文档编译时进行裁剪,您可以检查裁剪的文件是否已经存在。(有些校验和会更好)
\documentclass{article}
\usepackage{graphicx}
\newcommand{\includeCroppedPdf}[2][]{%
\IfFileExists{./#2-crop.pdf}{}{%
\immediate\write18{pdfcrop #2 #2-crop.pdf}}%
\includegraphics[#1]{#2-crop.pdf}}
\begin{document}
\includeCroppedPdf[width=\textwidth]{test}
\end{document}
MD5 校验和示例
想法是保存图像的 MD5 并在下次运行时进行比较。这需要\pdf@filemdfivesum
宏(仅适用于PDFLaTeX
或LuaLaTeX
)。XeLaTeX
您可以使用\write18
实用md5sum
程序或执行文件差异。
\documentclass{article}
\usepackage{graphicx}
\usepackage{etoolbox}
\makeatletter
\newcommand{\includeCroppedPdf}[2][]{\begingroup%
\edef\temp@mdfivesum{\pdf@filemdfivesum{#2.pdf}}%
\ifcsstrequal{#2mdfivesum}{temp@mdfivesum}{}{%
%file changed
\immediate\write18{pdfcrop #2 #2-crop.pdf}}%
\immediate\write\@auxout{\string\expandafter\string\gdef\string\csname\space #2mdfivesum\string\endcsname{\temp@mdfivesum}}%
\includegraphics[#1]{#2-crop.pdf}\endgroup}
\makeatother
\begin{document}
\includeCroppedPdf[width=\textwidth]{abc}
\end{document}
答案2
如果有人因文件名路径中的空格而遇到问题,可以按照以下方法解决问题:
\documentclass{article}
\usepackage{graphicx}
\usepackage{etoolbox}
\makeatletter
\newcommand{\includeCroppedPdf}[2][]{\begingroup%
\edef\temp@mdfivesum{\pdf@filemdfivesum{"#2.pdf"}}%
\ifcsstrequal{#2mdfivesum}{temp@mdfivesum}{}{%
%file changed
\immediate\write18{pdfcrop "#2.pdf" "#2-crop.pdf"}}%
\immediate\write\@auxout{\string\expandafter\string\gdef\string\csname\space #2mdfivesum\string\endcsname{\temp@mdfivesum}}%
\includegraphics[#1]{"#2-crop"}\endgroup}
\makeatother
\begin{document}
\includeCroppedPdf[width=\textwidth]{./path to file with spaces/abc efg}
\end{document}
\graphicspath
注意:更改后不起作用