
Я пишу документ, в котором много графиков с большим количеством точек данных. Эти графики хранятся как .pdf
векторные изображения, и их рендеринг занимает много времени. Поэтому каждый раз, когда я натыкаюсь на страницу с одним из них, мой редактор зависает на целую минуту.
Я знаю, что у graphicsx есть черновик, но он скрывает изображения, что не очень хорошее решение, поскольку тогда я не могу отличить изображения только по имени файла. Это результаты экспериментальных запусков с довольно общими именами.
Есть ли, возможно, способ растеризовать изображения (например, в .png
) в черновом режиме и использовать оригинал .pdf
в окончательном режиме? Я знаю, что я мог бы использовать ImageMagick или какие-либо внешние инструменты для выполнения преобразования, но это кажется большой дополнительной работой, поскольку мне нужно будет добавить каждое изображение в makefile и дублировать \includegraphics
для чернового и окончательного режима.
Есть некоторые параметры graphicsx, такие как type
или command
, которые не описаны в документации. Возможно, этого можно достичь с помощью одного из них? Возможно, я могу подключить \includegraphics
и вызвать внешнюю команду? Я бы написал команду, но понятия не имею, как работают хуки в LaTeX.
В остальном я прекрасно понимаю, что растровая графика уступает векторной по качеству. В финальной версии я собираюсь использовать векторную графику. Она предназначена исключительно для быстрого просмотра черновика.
решение1
Путь поиска изображений можно изменить:
\graphicspath
с каталогом для изображений PDF или его аналогов, изображений PNG.\DeclareGraphicsExtensions
может использоваться для изменения порядка, какое расширение используется первым, когда файл изображения был указан без расширения. Пакетgrfext
предоставляет интерфейс для изменения настройки.
Пакет epstopdf
можно использовать для автоматического вызова преобразования из PDF в PNG, если используется pdfTeX или luaTeX и включена функция экранирования оболочки.
Пример:
Если \mydraft
определено как Y
( \let\mydraft=Y
), то правило для расширения .pdf
перезаписывается, чтобы выполнить преобразование в .png
с помощью ImageMagick's convert
. В противном случае .pdf
расширение является предпочтительным.
\documentclass{article}
\usepackage{graphicx}
\usepackage{grfext}
\ifx\mydraft Y
\usepackage{epstopdf-base}
\epstopdfDeclareGraphicsRule{.pdf}{png}{.png}{%
convert #1 \OutputFile
}
\epstopdfDeclareGraphicsRule{.PDF}{png}{.png}{%
convert #1 \OutputFile
}
\else
\PrependGraphicsExtension*{.pdf}
\fi
\begin{document}
\includegraphics{image}
\end{document}
Специальный режим черновика включается с помощью \let\mydraft=Y
, который также можно указать в командной строке, например:
pdflatex --shell-escape "\let\mydraft=Y\input{mydocument}"
Затем image.pdf
преобразуется и включается как image-pdf-converted-to.png
.
В противном случае, image.pdf
включен, даже если image.png
лежит где-то.
Ключ для\includegraphics
Функция преобразования также может быть ограничена \includegraphics
с помощью ключа pdfpng
. Код ключа изменяет графическое правило для .pdf
файлов, чтобы преобразовать их в PNG. Если \mydraft
нет Y
, то ключ является пустой операцией.
\documentclass{article}
\usepackage{graphicx}
\usepackage{grfext}
\ifx\mydraft Y
\usepackage{epstopdf-base}
\csname define@key\endcsname{Gin}{pdfpng}[]{%
\epstopdfDeclareGraphicsRule{.pdf}{png}{.png}{%
convert ##1 \OutputFile
}%
}
\else
\PrependGraphicsExtensions*{.pdf}
\csname define@key\endcsname{Gin}{pdfpng}[]{}
\fi
\begin{document}
\includegraphics{image1}
\includegraphics[pdfpng]{image2-converted-to-png-when-mydraft}
\includegraphics{image3}
\end{document}
( \define@key
можно использовать вместо \csname define@key\endcsname
, когда \makeatletter
активно.)