Una solución alternativa es usarlo pdfcrop
por separado (en la terminal) para recortar el archivo PDF que queremos importar.
Sin embargo, ¿hay alguna forma de eliminar los márgenes blancos al importar un archivo PDF desde dentro del tex
archivo?
Los dos paquetes comunes para importar archivos PDF son pdfpages
o graphicx
. ¿Puedo 'preprocesar' un archivo para ellos pdfcrop
dentro del tex
archivo?
Respuesta1
Un nuevo comando que funciona como \includegraphics
, pero recorta la imagen del pdf:
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
Recordar: \write18
necesita estar habilitado. Para la mayoría de las distribuciones TeX, configure la --shell-escape
bandera al ejecutar latex
/ pdflatex
etc.
Ejemplo
\documentclass{article}
\usepackage{graphicx}
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
\begin{document}
\includeCroppedPdf[width=\textwidth]{test}
\end{document}
Evite recortar en cada compilación
Para evitar recortar en cada compilación de documentos, puede verificar si el archivo recortado ya existe. (algo de suma de verificación sería mejor)
\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}
Ejemplo de suma de comprobación MD5
La idea es guardar el MD5 de la imagen y compararlo en la siguiente ejecución. Esto requiere la \pdf@filemdfivesum
macro (solo funciona con PDFLaTeX
o LuaLaTeX
). Puede XeLaTeX
usarlo \write18
con md5sum
la utilidad o hacer una diferenciación de archivos.
\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}
Respuesta2
Si alguien tiene problemas debido a espacios en la ruta del nombre del archivo, lo siguiente resuelve el problema:
\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: No funciona cuando se \graphicspath
cambia