![Пример](https://rvso.com/image/281557/%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80.png)
Обходной путь — использовать pdfcrop
отдельную функцию (в терминале) для обрезки PDF-файла, который мы хотим импортировать.
Однако есть ли способ удалить белые поля при импорте PDF-файла из самого tex
файла?
Два распространенных пакета для импорта файлов PDF — это pdfpages
или graphicx
. Могу ли я «предварительно обработать» файл для них с pdfcrop
помощью tex
файла?
решение1
Новая команда, которая работает так же \includegraphics
, но обрезает изображение PDF:
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
Помнить: \write18
необходимо включить. Для большинства дистрибутивов TeX установите --shell-escape
флаг при запуске latex
/ pdflatex
и т.д.
Пример
\documentclass{article}
\usepackage{graphicx}
\newcommand{\includeCroppedPdf}[2][]{%
\immediate\write18{pdfcrop #2}%
\includegraphics[#1]{#2-crop}}
\begin{document}
\includeCroppedPdf[width=\textwidth]{test}
\end{document}
Избегайте обрезки при каждой компиляции
Чтобы избежать обрезки при каждой компиляции документа, вы можете проверить, существует ли уже обрезанный файл. (лучше использовать контрольную сумму)
\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}
Пример контрольной суммы MD5
Идея заключается в том, чтобы сохранить MD5 изображения и сравнить его при следующем запуске. Для этого требуется макрос \pdf@filemdfivesum
(работает только с PDFLaTeX
или LuaLaTeX
). Для этого XeLaTeX
вы можете использовать утилиту \write18
with md5sum
или сделать файл 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}
решение2
Если у кого-то возникли проблемы из-за пробелов в пути к имени файла, вот решение:
\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}
Примечание: Не работает при \graphicspath
изменении