Eine Problemumgehung besteht darin, die pdfcrop
zu 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 tex
Datei heraus zu entfernen?
Die beiden gängigen Pakete zum Importieren von PDF-Dateien sind pdfpages
oder . Kann ich mit „ inside file graphicx
“ eine Datei für sie „vorverarbeiten“ ?pdfcrop
tex
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: \write18
muss aktiviert werden. Bei den meisten TeX-Distributionen muss das --shell-escape
Flag beim Ausführen von latex
/ pdflatex
etc. 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@filemdfivesum
Makro (funktioniert nur mit PDFLaTeX
oder LuaLaTeX
). XeLaTeX
Sie können dafür das Dienstprogramm \write18
mit verwenden md5sum
oder 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 \graphicspath
geändert wird