свойство embedfonts меняется прямоугольник моего участка Р


Я сделал красивый сюжет в R, чтобы использовать его в научном журнале. Согласно спецификациям журнала, мне нужен формат файла eps со встроенными шрифтами. Поскольку R не экспортирует файлы eps со встроенными шрифтами, я использую базовый графический вызов embedFonts() для его преобразования. Однако этот звонок меняет ограничивающую рамку моей фигуры. В этом простом примере ниже белое пространство обрезается. В моем графике качества публикации с поправкой на ОКР добавляется пустое пространство, потому что я его уже настроил идеально по краям.

Я хочу, чтобы шрифты были встроены, но все остальное осталось прежним!

Вот пример:

setEPS()
postscript(file = "~/Desktop/test.eps", family = "Helvetica", colormodel = "srgb", width = 5, height = 3)
plot(x = 1:10, y = 1:10, col = "red", main = "Keep everything the same but embed my fonts!")
dev.off()
embedFonts(file = "/Users/athena/Desktop/test.eps", format = "eps2write", outfile = "/Users/athena/Desktop/stupid.eps")

Пока у меня есть:
- установлен ghostscript с помощью homebrew: $ brew install ghostscript
- узнал, что embedFonts нужны полные пути, Тильда не разрешена
- указан формат как "eps2write", поскольку значение по умолчанию "ps2write" изменяет его на postscript

Я потратил столько усилий на "воспроизводимые исследования" с открытыми данными, открытым кодом, открытым журналом., бла-бла-бла... Я действительно не хочу, чтобы мои окончательные цифры были сделаны с помощью преобразования illustrator или чего-то еще: (
1 2

1 ответ:

Причина, по которой это происходит, заключается в том, что embeddfonts внутренне вызывает Ghostscript, который, в свою очередь, пытается действовать разумно, устанавливая "оптимальную" ограничивающую рамку, вырезая часть окружающего белого пространства.

Мы можем предотвратить это, нарисовав невидимый прямоугольник по периметру нашей области рисования 5inx3in в R. просто добавьте еще одну строку в свой фрагмент кода:

setEPS()
postscript(file = "~/Desktop/test.eps", family = "Helvetica", colormodel = "srgb", width = 5, height = 3)
plot(x = 1:10, y = 1:10, col = "red", main = "Keep everything the same but embed my fonts!")
box(which="outer", col="white")
dev.off()
embedFonts(file = "/Users/athena/Desktop/test.eps", format = "eps2write", outfile = "/Users/athena/Desktop/stupid.eps")

Еще один способ сделать это-ответ Джонатана здесь, который в основном использует sed для чтения в ограничивающем поле информации из входной файл и записывает его в выходной файл: http://r.789695.n4.nabble.com/eps-file-with-embedded-font-td903387.html как указано @neilfws в комментарии выше.