例子

例子

一种解决方法是单独使用pdfcrop(在终端中)来裁剪我们要导入的 PDF 文件。

但是 - 有没有办法在从tex文件内部导入 PDF 文件时去除白边?

导入 PDF 文件的两个常见包是pdfpages或。我可以使用文件内的graphicx“预处理”文件吗?pdfcroptex

答案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宏(仅适用于PDFLaTeXLuaLaTeX)。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注意:更改后不起作用

相关内容