例子

例子

解決方法是單獨使用pdfcrop(在終端機中)裁剪我們要匯入的 PDF 檔案。

但是 - 從文件內部匯入 PDF 文件時有沒有辦法刪除白邊距tex

導入 PDF 文件的兩個常見包是pdfpagesgraphicx。我可以使用文件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巨集(僅適用於PDFLaTeXLuaLaTeX)。對於您可以與實用程式一起XeLaTeX使用或進行文件比較。\write18md5sum

\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注意:更改後不起作用

相關內容