Verwenden relativer Pfade in Rmarkdown beim Stricken von zwei verschiedenen Stellen aus

Nov 20 2020

Mein Problem ist die Verwendung relativer Links und das "Kompilieren" (Stricken).

Ich schreibe ein Buch mit RMarkdown. Da die Datei relativ groß sein wird, muss ich sie in Unterdateien und Verzeichnisse aufteilen.

Ich habe eine Masterdatei, die nur Links zu Kapiteln enthält (Kapitel 1, Kapitel 2, ...). Zu jedem Kapitel gibt es eine Datei, auf die jeweils einige Abbildungen verweisen müssen (Abb. 1, ...).

Ich möchte in der Lage sein, masterfile.Rmd und chap1.Rmd unabhängig voneinander zu stricken, um eine Datei für Kapitel und eine Datei für das gesamte Buch zu erhalten.

So sind meine Dateien organisiert (MVE). Verzeichnisse werden in Großbuchstaben angezeigt.

  • WURZEL
    • masterfile.Rmd
    • Zahlen
      • fig1.pdf
      • fig2.pdf
    • KAPITEL
      • chap1.Rmd
      • chap2.Rmd
      • ...

Der Code von masterfile.Rmd lautet wie folgt:

{r child = '/chapters/chap1.Rmd'}

Der Code von chap1.Rmd lautet wie folgt:

![](../figures/fig1.pdf)

Beim Stricken chap1.Rmdist alles in Ordnung. Beim Stricken masterfileerhalte ich folgende Meldung:

[WARNUNG] Ressource '../figures/fig1.pdf' konnte nicht abgerufen werden: PandocResourceNotFound "../figures/fig1.pdf"

Es scheint, dass fig1.pdfnicht gefunden werden kann. Ich vermute, dass dies daran liegt, dass die include-Anweisung in der Master-Datei nur den Code von "kopiert" chap1.Rmdund im ROOTVerzeichnis (nicht im CHAPTERSVerzeichnis) "ausführt", so dass ".." zu einem Speicherort fährt, der (vor ROOT) nicht vorhanden ist, wenn gestrickt aus masterfile.

Ich könnte die Einstellung ändern und ![](/figures/fig1.pdf)in eine chap1.RmdDatei schreiben . Es würde gut funktionieren, wenn aus gestrickt wird, masterfileaber nicht mehr aus chap1.Rmd.

Wissen Sie, wie man beides hat?

Antworten

1 DanielJachetta Nov 20 2020 at 22:37

Willkommen in der RMarkdown-Community!

Aufgrund der Zusammenarbeit zwischen KnitR, Rmd und Pandoc ist dies keine so einfache Lösung, wie Sie denken, aber eine Verzeichnisumstrukturierung wäre fast einfacher.

Selbst wenn man sich neuestes Buch Rmarkdown Autor RMarkdown CookbookHIER . Sie haben alle Kapitel im ROOTVerzeichnis und nur Unterverzeichnisse für Bilder (und möglicherweise Abbildungen).

Ressourcen:

1. Andere SO ähnliche Frage

2. Github Optionen knitr Frage

3. ähnliche Frage von der Rstudio Community

tarleb Nov 21 2020 at 18:24

Sie können die Lua-Filterfunktion verwenden , um Bildpfade beim Stricken der Hauptdatei neu zu schreiben. Z.B

function Image (img)
  img.src = img.src:gsub('^%.%./', './')
  return img
end

Dies ersetzt einen Pfad wie ../figures/fig1.pdfmit ./figures/fig1.pdf.

Verwenden Sie den Code, um ihn in eine Datei zu schreiben und das Hinzufügen über aufzurufen pandoc_args(nur in der Hauptdatei).

---
output:
  html_document:
    pandoc_args: ["--lua-filter=filter.lua"]
---