Beispiel

Beispiel

Eine Problemumgehung besteht darin, die pdfcropzu importierende PDF-Datei separat (im Terminal) zuzuschneiden.

Gibt es jedoch eine Möglichkeit, weiße Ränder beim Importieren einer PDF-Datei direkt aus der texDatei heraus zu entfernen?

Die beiden gängigen Pakete zum Importieren von PDF-Dateien sind pdfpagesoder . Kann ich mit „ inside file graphicx“ eine Datei für sie „vorverarbeiten“ ?pdfcroptex

Antwort1

Ein neuer Befehl, der wie funktioniert \includegraphics, aber das PDF-Bild zuschneidet:

\newcommand{\includeCroppedPdf}[2][]{%
    \immediate\write18{pdfcrop #2}%
    \includegraphics[#1]{#2-crop}}

Erinnern: \write18muss aktiviert werden. Bei den meisten TeX-Distributionen muss das --shell-escapeFlag beim Ausführen von latex/ pdflatexetc. gesetzt werden.

Beispiel

\documentclass{article}

\usepackage{graphicx}

\newcommand{\includeCroppedPdf}[2][]{%
    \immediate\write18{pdfcrop #2}%
    \includegraphics[#1]{#2-crop}}

\begin{document}
    \includeCroppedPdf[width=\textwidth]{test}
\end{document}

Vermeiden Sie das Zuschneiden bei jeder Kompilierung

Um das Zuschneiden bei jeder Dokumentzusammenstellung zu vermeiden, können Sie prüfen, ob die zugeschnittene Datei bereits vorhanden ist. (Eine Prüfsumme wäre besser.)

\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} 

Beispiel für MD5-Prüfsumme

Die Idee ist, den MD5 des Bildes zu speichern und ihn beim nächsten Durchlauf zu vergleichen. Dies erfordert das \pdf@filemdfivesumMakro (funktioniert nur mit PDFLaTeXoder LuaLaTeX). XeLaTeXSie können dafür das Dienstprogramm \write18mit verwenden md5sumoder einen Datei-Diff durchführen.

\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}

Antwort2

Wenn bei jemandem aufgrund von Leerzeichen im Dateinamenpfad ein Problem auftritt, kann das Problem durch Folgendes behoben werden:

\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}

NB: Funktioniert nicht, wenn \graphicspathgeändert wird

verwandte Informationen