Uma solução alternativa é usar pdfcrop
separadamente (no terminal) para cortar o arquivo PDF que queremos importar.
No entanto - existe uma maneira de remover as margens brancas ao importar um arquivo PDF de dentro do tex
arquivo?
Os dois pacotes comuns para importar arquivos PDF são pdfpages
ou graphicx
. Posso 'pré-processar' um arquivo para eles pdfcrop
dentro tex
do arquivo?
Responder1
Um novo comando que funciona como \includegraphics
, mas corta a imagem do pdf:
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
Lembrar: \write18
precisa ser habilitado. Para a maioria das distribuições TeX, defina o --shell-escape
sinalizador ao executar latex
/ pdflatex
etc.
Exemplo
\documentclass{article}
\usepackage{graphicx}
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
\begin{document}
\includeCroppedPdf[width=\textwidth]{test}
\end{document}
Evite cortar em cada compilação
Para evitar cortes em cada compilação de documentos, você pode verificar se o arquivo cortado já existe. (alguma soma de verificação seria melhor)
\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}
Exemplo de soma de verificação MD5
A ideia é salvar o MD5 da imagem e compará-lo na próxima execução. Isso requer a \pdf@filemdfivesum
macro (funciona apenas com PDFLaTeX
ou LuaLaTeX
). Para XeLaTeX
você pode usar \write18
com md5sum
utilitário ou fazer um arquivo diff.
\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}
Responder2
Se alguém tiver problemas devido a espaços no caminho do nome do arquivo, o seguinte resolve o 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: Não funciona quando o \graphicspath
é alterado