книтр пандок:“не удается создать PDF-файл с помощью программы pdf writer”

StackOverflow https://stackoverflow.com//questions/22056671

Вопрос

Впереди:используя pandoc() в knitr он жалуется при попытке скомпилировать .md или .Rmd в PDF.

Я оптимизирую процесс для воспроизводимые исследования, как было задокументировано во многих местах.Я использую pandoc и knitr и создавать отличные документы.Я также пытаюсь упростить работу для некоторых коллег, которые не так хорошо разбираются в программировании, но мы пытаемся использовать похожие файлы.Существует несколько вариантов "удобных" редакторов, ориентированных на markdown, и по нескольким причинам я предпочитаю RStudio (для них emacs / ess для меня, но это другое).

Мой рабочий процесс:предоставьте им файл markdown (.md или .Rmd), и пусть они смогут вносить изменения и при необходимости повторно отображать его в формате PDF.К сожалению, RStudio (AFAICT) не позволяет устанавливать шаблоны или другие произвольные параметры конфигурации pandoc (например, главы, разделы с номерами), поэтому использование pandoc() в R / knitr здесь есть большой смысл.

Используя whitepaper.Rmd в качестве входного файла я запускаю pandoc('whitepaper.Rmd', 'pdf') введите R и сразу же получите:

> pandoc('whitepaper.Rmd', 'pdf')
executing pandoc  -t latex --standalone --smart --number-sections --template=report.tex -f markdown -t pdf -o whitepaper.pdf "whitepaper.Rmd"
pandoc.exe: cannot produce pdf output with pdf writer
Error in (function (input, format, ext, cfg)  : conversion failed

У меня явно есть "t: latex" в моем заголовке, специфичном для knitr, хотя и без него, pandoc() все еще добавляет "-t pdf" к системному вызову, что-то, что pandoc.exe не принимает.

При устранении неполадок команда работает просто отлично, если я удаляю '-t pdf', поэтому кажется , что с самим входным файлом нет ничего плохого:

> system('pandoc  -t latex --standalone --smart --number-sections --template=report.tex -f markdown -o whitepaper.pdf "whitepaper.Rmd"')

Было множество других разговоров на эту тему: 14586177, 14508429, 15258233, и широко обсуждаемый 11025123.Все они разрешаются решениями, требующими работы в командной строке, дополнительных промежуточных шагов, внешних Make-файлов или knit2pdf() (который использует texi2pdf, нежелателен).

Ограничения, какими я их вижу:

  • простая работа в среде R;
  • воспользуйтесь преимуществами Yihui "<!--pandoc ... -->" конфигурация в файле (которая позволяет мне продолжать произвольно переключаться между моими шаблонами, для одного из нескольких примеров);
  • предпочтительно выполнить это с помощью одной "стандартизированной" команды (т.е. "pandoc('whitepaper.Rmd', 'pdf')").

...так что, как только параметры заданы в файле, редактирование и повторный рендеринг становятся относительно безмозглыми.

Я могу исправить и перезаписать Yihui knitr:::pandoc_one() чтобы удалить оскорбительное добавление '-t' и format, но мне интересно, какие побочные эффекты это может иметь в другом месте.Это решение не является ни устойчивым, ни "Правильным способом (tm)".

Предложения по "Правильным способам (tm)" решения этой проблемы?Мне не хватает простого / очевидного решения?

Кстати:спасибо Ихуэй Се за knitr и Джону Макфарлейну за pandoc.Потрясающе!(Возможно, я мог бы отправить предложения по исправлению одному из них или обоим, чтобы обойти их в моем случае использования, хотя, если это касается только меня, возможно, это не имеет смысла.)

Это было полезно?

Решение

Я думаю, что вся необходимая вам информация есть в ?pandoc, который включает в себя пример запуска system("pandoc -h") чтобы просмотреть возможные выходные форматы.Из этого вы узнаете, что

Выходные форматы:asciidoc, beamer, контекст, docbook, docx, dzslides, epub, epub3, fb2, html, html5, json, latex, man, markdown, markdown_github, markdown_mmd, markdown_phpextra, markdown_strict, mediawiki, native, odt, opendocument, opml, org, pdf *, обычный, revealjs, первый, rtf, s5, скользящий, slidy, texinfo, текстильный [* для вывода в формате PDF используйте latex или beamer и -o FILENAME.pdf]

Так что в основном format = "pdf" недопустимо, вы должны использовать pandoc("tmp.Rmd", format = "latex", ext = "pdf") (и в действительности ext="pdf" часть используется по умолчанию, в соответствии с ?pandoc, так что все, что вам действительно нужно, это pandoc("tmp.Rmd", "latex")).Что касается того, почему pandoc('whitepaper.Rmd', 'pdf') привело к звонку с -t pdf, ну, вы сказали ему сделать это во втором аргументе вашему pandoc() позвони.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top