Помогает использование промежуточного файла «.ps»

Помогает использование промежуточного файла «.ps»

Я использую Inkscape для создания графики, которую экспортирую в PDF-файлы, чтобы включить их в документы LaTeX (с помощью \includegraphics и pdflatex). Я не замечал, что что-то не так, пока кто-то не сказал мне, что мои рисунки некорректно отображаются в Mac OS X. Базовые графические части, например, прямоугольники или круги, имеющие настройку Opacity менее 100%, вообще не отображаются.

Проблема, похоже, в pdflatex, так как экспортированный PDF из inkscape отображается на Mac просто отлично. Поскольку я использую Linux и иногда Windows, я даже не заметил, что есть проблема!

Попытавшись выяснить, что могло вызвать проблему, я наткнулся на

\includegraphics PDF, проблема с цветом и Inkscape → PDF → includegraphics → XeLaTeX → измененные цвета

Однако это не решило мою проблему.

Похожий вопрос был задан вПотерян градиент от непрозрачного к прозрачному во встроенном PDF-рисункено теперь ответ действительно был дан.

Я обнаружил, что преобразование экспортированного PDF-файла в PS, а затем обратно в PDF решает проблему, но качество графики после этого становится довольно плохим.

Что я упустил? Спасибо за любые предложения.

Ниже приведен минимальный рабочий пример:

\documentclass[a4paper]{article}
\usepackage[pdftex]{color,graphicx}

\begin{document}

\begin{figure}[htb]
 \begin{center}
  \includegraphics[width=\columnwidth]{test_diagram}
  \caption{Block diagram created with Inkscape 0.48}
 \end{center}
\end{figure}

\end{document}

Прилагаемую графику можно загрузить здесь:https://www.dropbox.com/s/mrtj0c3u0ng6a39/test_diagram.pdf

Inkscape: 0.48.3.1 r9886
pdfTeX, версия 3.1415926-2.4-1.40.13 (TeX Live 2012/Debian)

решение1

Я также сталкивался с этой проблемой, если изображения Inkscape встраивались pdflatexи затем отображались в средстве просмотра на базе PDFKit. (PDFKit — это встроенный механизм рендеринга PDF-файлов в OS X, используемый Skim, Preview и многими другими программами).

Судя по всему, в Inkscape используется «необычный» способ задания прозрачностей, который не сохраняется после внедрения, выполняемого pdflatex.

Единственный обходной путь, который надежно сработал для меня, — это «дезинфекция» PDF путем выравнивания прозрачностей. Для этой цели я использую ghostscript (через ps2pdfwrскрипт) с переключателем:dHaveTransparencies=false

ps2pdfwr -dCompatibilityLevel=1.4 -dHaveTransparency=false test_diagram.pdf sanitized.pdf

Недостаток в том, что это сводится к растрированию изображения. Разрешение по умолчанию для этого составляет 720 точек на дюйм, что должно быть приемлемо для большинства случаев использования. Однако, если вам нужно лучшее (или худшее) качество, вы также можете указать разрешение:

ps2pdfwr -dCompatibilityLevel=1.4 -r1200 -dHaveTransparency=false test_diagram.pdf sanitized.pdf

При 1200 dpi ваше изображение размером ~5 KiB увеличивается до ~78 KiB в растровой версии. Однако, прозрачные пленки PDF являются источникоммногостранные проблемы, если дело касается устройств вывода – не только если они производятся Inkscape. См., например: Использование непрозрачности в TikZ делает всю страницу «более грубой» при печати.. Поэтому я считаю это ценой, которую нужно заплатить.

решение2

Кажется, здесь это работает, нужно изменить альфа-непрозрачность, а не общую непрозрачность.

http://www.inkscapeforum.com/viewtopic.php?f=28&t=15739&p=65180#p65180

Я использую pdftex и Inkscape 0.91.

решение3

У меня была та же проблема с Inkscape/Mac OS/LaTeX. Я смог справиться с этим, растеризовав только проблемные части изображения и оставив остальное векторизованным. Для этого я открыл файл SVG, выбрал нужный объект(ы) в Inkscape и сделал Edit -- >Make a Bitmap Copy, а затем сохранил как PDF. Я не смог ничего сделать по этой проблеме с Inkscape 0.91, но это сработало с Inkscape 0.48.

решение4

Помогает использование промежуточного файла «.ps»

Как и RalfB, я обнаружил, что конвертация сначала в PS, а затем в PDF сделала latex счастливее. Использование этого скрипта помогло:

inkscape foo.svg --export-ps=foo.ps
pstopdf foo.ps -o foo.pdf

Затем просто скомпилируйте ваш файл latex как обычно.

Должно быть, преобразование Inkscape в «.pdf» что-то портит по сравнению с преобразованием в «.ps», как упомянул Дэниел.

Полученные результаты

Вот фотографии до и после, показывающие, что желаемая прозрачность присутствует при прохождении через п.с.:

До (svg -> pdf)

Перед промежуточным пс

После (svg -> ps -> pdf)

После промежуточного пс

Связанный контент