Ejemplo

Ejemplo

Una solución alternativa es usarlo pdfcroppor 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 texarchivo?

Los dos paquetes comunes para importar archivos PDF son pdfpageso graphicx. ¿Puedo 'preprocesar' un archivo para ellos pdfcropdentro del texarchivo?

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: \write18necesita estar habilitado. Para la mayoría de las distribuciones TeX, configure la --shell-escapebandera al ejecutar latex/ pdflatexetc.

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@filemdfivesummacro (solo funciona con PDFLaTeXo LuaLaTeX). Puede XeLaTeXusarlo \write18con md5sumla 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 \graphicspathcambia

información relacionada