Экспорт графики для публикаций: как добиться согласованной толщины линий в сюжетных элементах?
Кажется, что создание графического качества публикации с mma - это черное искусство, которое датируется десятилетиями. Несмотря на то, что в последние годы ситуация значительно улучшилась, все еще сложно получить согласованные результаты при экспорте в файлы. То, как выглядит конечный результат, выглядит несколько зависящим от формата (с EPS лучше всего работает в моем опыте).
Довольно часто строки в кадрах и меток заканчиваются слишком слабыми в файле EPS, и, пытаясь сделать что-то вроде FrameStyle->AbsoluteThickness[2]
, легко получить слишком толстые строки. Таким образом, мой текущий подход включает в себя принятие пяти параметров - трехлинейных толщин (в FrameStyle, AxesStyle и PlotStyle), ImageSize и FontSize в BaseStyle - и случайным образом настраивает их до тех пор, пока экспортируемый график не станет приемлемым. Это несколько неудовлетворительно и требует много времени.
Есть ли лучший способ и/или стандартный рецепт, чтобы следовать, чтобы достичь сбалансированных, красивых графиков?
Изменить: здесь один пример. Выглядит хорошо на экране (см. Снимок экрана), но экспортируйте его в EPS, и вы, вероятно, увидите две вещи: (a) Там ошибка с вложением шрифта EPS: для меня эпсилон внутри фигуры не встроен должным образом, если я не удаляю директиве FontWeight->Normal
. (b) Линии кадра/метки светло-серые и 1 пиксель. Если бы я хотел сжать эту цифру (например, чтобы разместить ее как вставку), это избаловало бы качество. Однако использование AbsoluteThickness[2]
выглядит плохо - поэтому мне нужно увеличить ImageSize
. Но тогда шрифты слишком малы и/или строки в сюжете выглядят слишком тонкими и т.д. И т.д.
With[{exSubscript = "\[UpTee]", epsFontSize = 24,
xcoords = {0.63, 2.2}}, testInset = Style[Inset[Cell[TextData[Cell[
BoxData[FormBox[SubscriptBox["\[Epsilon]", exSubscript],
TraditionalForm]]]]], xcoords, {Left, Baseline}],
FontWeight -> Normal, FontSize -> epsFontSize];
];
Show[Plot[10 x^2, {x, 0, 1}, PlotStyle -> Thick, Frame -> True,
PlotRange -> {-2, 8}, Epilog -> {testInset}], Axes -> {True, True},
AxesOrigin -> {0, 0}, AxesStyle -> Dashed,
FrameLabel -> {"\[Lambda] [\[Mu]m]", "Re{\[Epsilon]}"},
BaseStyle -> {FontSize -> 22, FontWeight -> Plain,
FontFamily -> Helvetica}, ImageSize -> 500]
Export["test.eps", %]
![Sample plot]()
Изменить: Принимая ответ Szabolcs, но Mr.Wizard следует отдать должное за указание FontFamily -> Helvetica
vs FontFamily -> "Helvetica"
(что кажется ошибкой). Без кавычек экспорт PDF не является стартером из-за испорченных шрифтов.
Ответы
Ответ 1
Экран против просмотра печати
Трудно сравнивать толщину линий на экране, особенно когда отображаемая толщина приближается к 1 пикселю. Я нашел, что лучше всего печатать цифры в окончательном размере публикации и проверять их качество таким образом.
Использовать абсолютные измерения
Большинство проблем, с которыми я столкнулся, связаны с тем, что Mathematica использует как абсолютные, так и относительные (по размеру) размеры. Для цифр, которые будут отображаться в печати, проще всего использовать абсолютные размеры, которые не масштабируются с графиком, в частности, для размеров шрифта и толщины линии. Таким образом, вы можете иметь хорошее представление о том, как результат будет выглядеть в печати (и он не зависит от размера фигуры). Номера, которые вы даете Mathematica, находятся в точках принтера.
Экспорт
Наконец, я обнаружил, что экспорт в EPS менее надежный, чем экспорт в PDF (например, шрифты, возможно, не будут внедрены, как вы упомянули), и Mathematica не может сохранить все функции (например, непрозрачность!) при экспорте в EPS. Для 2D-графиков PDF обычно является хорошим выбором. Однако есть ошибка при экспорте PDF и определении ImageSize в Export. Обходной путь, который я использую,
cm = 72/2.54 (* centimetres *)
Export["figure.pdf", Show[figure, ImageSize -> 7 cm]] (* 7 cm wide figure *)
Вы можете включить результат в документ без какого-либо масштабирования, и вы будете иметь согласованные размеры шрифта и толщину линий на всех рисунках.
В целом, это более или менее сработало для меня:
- используйте абсолютные измерения для вещей, которые должны быть согласованными между фигурами в печати.
- экспортировать в PDF с конечным размером и не пересказывать результат до его включения (например, не указывать ширину в LaTeX)
Ответ 2
Я заменил FontFamily -> "Helvetica"
и экспортировал в PDF. Открывая этот PDF файл в Foxit Reader, я вижу следующее:
![enter image description here]()
Кроме разного масштабирования (не уверен, почему) он выглядит очень похоже на ваш рендеринг.
Ответ 3
Я бы внимательно посмотрел на LevelScheme, который я использовал для графики качества публикации.