Экспорт графики для публикаций: как добиться согласованной толщины линий в сюжетных элементах?

Кажется, что создание графического качества публикации с 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, который я использовал для графики качества публикации.