Стратегия, чтобы pdf () в R использовал другие устройства - PullRequest
0 голосов
/ 06 января 2011

Это вопрос, состоящий из нескольких частей, для SO, прежде чем я буду больше заниматься основной командой.

Резюме: в OS X файлы pdf должны создаваться с использованием кварца, а не постскриптума. Файлы меньше, сглаживание лучше, шрифты ОС, включая opentype, легко доступны, кодирование менее болезненно, в целом, я думаю, что это лучшее устройство. На других платформах было бы разумно использовать cairo, опять же более современное устройство для записи PDF.

Рассмотрим поведение устройства png (). Хотя якобы предполагается, что он будет перемещен из x11.R, он обрабатывает c ("cairo", "Xlib", "quartz") со значением по умолчанию (options ("bitmapType")), установленным zzz.R (quartz ifabilities "Аква"), Каир, если имеется, Xlib в противном случае). PDF должен вести себя так же, чтобы в Sweave (или babel или что-то еще) мои PDF-рисунки можно было генерировать с помощью соответствующего устройства.

My Sweave png patch работает, потому что png () заботится о получении опции устройства. Более ранняя версия патча (, которую я до сих пор использую ) переворачивает устройство в Sweave, но меня это задело, и я знаю, что это неправильное место для этого.

Есть некоторый псевдоним cairo_pdf () (также в x11.R), который, вероятно, не должен быть там, не должен ли он быть объединен с pdf () переключения устройств?? Один из подходов заключается в добавлении опции "pdfType", которая, в свою очередь, я думаю, должна быть более общей - устройство по умолчанию уже есть, просто pdf () его игнорирует! Я особенно осторожен с введением новых глобальных опций, потому что они с большей вероятностью будут отклонены ядром.

1 Ответ

1 голос
/ 07 января 2011

Не думаю, что вам нужно реализовывать драйвер устройства.В основном это звучит так, как будто вы хотите использовать псевдоним pdf (), чтобы он вызывал quartz () или cairo () в зависимости от ситуации.Устройство quartz () уже поддерживает вывод PDF в файл (среди прочего) в OS X.

Для вашего личного использования (я сомневаюсь, что это проникнет в ядро), вы можете просто использовать псевдоним pdf () длявыполните соответствующие действия на каждой из ваших платформ и внесите их в виде пакета или в свой Rprofile.

pdf.orig = pdf

pdf = function(...) {
    // Insert code here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...