Warum erfordert das Rendern einer PDF von rmarkdown das Schließen von rududio zwischen den Renderings?

8

Hintergrund

Ich versuche ein Rmarkdown-Dokument zu erstellen, das mit render() gerendert wird. Der Aufruf render hat zwei Elemente, die parametrisiert sind:

  • Ich möchte, dass der Benutzer PDF oder HTML angeben kann. Einfach mit output_format() .
  • Ich möchte auch einen Parameter an das Dokument übergeben, um anzugeben, ob die Tabellen (mit dem kableExtra -Paket) Latex oder HTML sind.

Dies ist die Rmarkdown-Datei namens test.Rmd

%Vor%

Hier sind nun die zwei Aufrufe zum Rendern der Datei:

%Vor%

Problem

Jetzt, wenn ich eine neue rududio Sitzung öffne, kann ich beide render Anrufe kein Problem ausführen. Entweder .pdf oder eine .html-Datei wird erstellt. Wenn ich dann versuche, das .pdf render erneut auszuführen bekomme ich den folgenden Fehler:

  

"C: / Programme / RStudio / bin / pandoc / pandoc" + RTS -K512m -RTS   test.utf8.md --to latex --from   Abschrift + autolink_bare_uris + ascii_identifiers + tex_math_single_backslash   --output test.pdf --template "C: \ Benutzer \ salbers \ R \ win-Bibliothek \ 3.4 \ rmarkdown \ rmd \ latex \ default-1.17.0.2.tex"   --highlight-tango --latex-engine pdflatex --variable graphics = yes --variable "geometry: margin = 1in"! Nicht definiertes Steuerelement   Sequenz. \ begin {tabular} {rrrrl} \ toprule                                               Sepal.Length & amp; Sepal.Width & amp; Pet ... l.267 \ end {tabular}}

     

pandoc.exe: Fehler beim Erzeugen von PDF Error: pandoc Dokumentkonvertierung   fehlgeschlagen mit Fehler 43 Zusätzlich: Warnmeldung: running command   '"C: / Programme / RStudio / bin / Pandoc / Pandoc" + RTS -K512m -RTS   test.utf8.md --to latex --from   Abschrift + autolink_bare_uris + ascii_identifiers + tex_math_single_backslash   --output test.pdf --template "C: \ Benutzer \ salbers \ R \ win-Bibliothek \ 3.4 \ rmarkdown \ rmd \ latex \ default-1.17.0.2.tex"   --highlight-tango --latex-engine pdflatex --variable graphics = yes --variable "geometry: margin = 1in" 'hatte den Status 43

Der HTML-Renderer funktioniert immer wieder einwandfrei. Wenn ich zuerst rududio schließe, dann öffne das Projekt, das Rendern für pdf funktioniert gut.

Frage

  • Kann mir jemand sagen, warum mein PDF gerenderten Rmarkdown-Dokument nicht zweimal in einer einzigen Sitzung von rududio gerendert werden kann?
  • Ähnlich, warum muss rududio zwischen Renderings geschlossen werden?
boshek 06.09.2017, 17:07
quelle

2 Antworten

8

Hmm, lass mich zuerst die Lösung posten. Um dieses Verhalten zu lösen, müssen Sie die folgenden Dinge in Ihren Yaml-Abschnitt einfügen. Ich habe auch eine Funktion kableExtra_latex_packages() in der Entwicklerversion zu Beginn dieser Woche hinzugefügt, um die folgenden Texte anzuzeigen.

%Vor%

Wenn Sie neugierig sind, warum es so ein komisches Verhalten gibt, hier eine kurze Erklärung. Wenn Sie kableExtra zum ersten Mal in eine rmarkdown-Umgebung laden, wird versucht, die LaTeX-Paketinformationen oben anzugeben in die rmarkdown Metadaten mit der usepackage_latex() Funktion , die kommt mit diesem Paket. Es funktioniert gut, wenn Sie nur den Knit-Knopf drücken, weil jeder "Strick + Rendering" -Prozess isoliert werden soll. Aber, wie wir hier sehen, wenn Sie versuchen, von der Konsole zu rendern, da (meine Annahme) knitr oder rmarkdown versucht, einige zwischengespeicherte Ergebnisse wiederzuverwenden, konnte dieser Prozess (wie wir es hier sehen) überraschend nicht replizieren. Es stellt sich heraus, dass diese LaTeX-Paketabhängigkeiten nicht in die Tex-Datei, die erzeugt wird, eingegeben werden und mit einem Fehler enden. Wenn Sie RStudio schließen und neu starten, ist der temporäre Speicher natürlich verschwunden und Sie sollten diese Pakete erneut laden können. Ich habe das Gefühl, dass es sich um einen Fehler im Zusammenhang mit der globalen Variablen im Rmarkdown handeln könnte. Ich denke, wir können es beheben, indem wir am Ende der render -Funktion einen "forget the meta" -Teil hinzufügen, aber ich muss es so aussehen.

Ein Teil davon war schlecht, weil ich nicht genügend Dokumentationen über LaTeX-Pakete zur Verfügung gestellt habe, die in früheren Versionen verwendet wurden. Nun habe ich zu Beginn der Paket-Vignette von kableExtra 0.5.0 einen neuen Abschnitt zu diesem Thema hinzugefügt. die Anfang dieser Woche veröffentlicht wurde. Fühlen Sie sich frei, es auszuprobieren. Wie bereits erwähnt, können Sie die Liste in der aktuellen Version auch mit der Funktion kableExtra_latex_packages() aufrufen.

    
Hao 06.09.2017, 19:51
quelle
1

In meinem Fall hat @Hao antwort nicht funktioniert ... Endlich habe ich es geschafft, das kableExtra-Paket nach jeder Renderausführung wie folgt zu entladen:

%Vor%

Es sollte auch möglich sein, die Umgebung mit etwas wie

auszuwählen %Vor%

das ist sauberer ... aber ich habe es nicht geschafft!

    
Patricia 30.11.2017 12:32
quelle

Tags und Links