Używanie ścieżek względnych w Rmarkdown podczas dziania z dwóch różnych miejsc
Mój problem polega na stosowaniu linków względnych i „kompilowaniu” (robieniu na drutach).
Piszę książkę przy użyciu RMarkdown. Ponieważ plik będzie stosunkowo duży, muszę podzielić na pliki podrzędne i katalogi.
Mam plik wzorcowy, który zawiera tylko linki do rozdziałów (rozdz. 1, rozdz. 2, ...). Dla każdego rozdziału istnieje plik i każdy wymaga odniesienia do niektórych rycin (ryc. 1, ...).
Chciałbym móc niezależnie od siebie łączyć masterfile.Rmd i chap1.Rmd, aby uzyskać jeden plik dla rozdziałów i jeden plik dla całej książki.
Oto jak są zorganizowane moje pliki (MVE). Katalogi są wyświetlane dużymi literami.
- KORZEŃ
- masterfile.Rmd
- RYSUNKI
- rys1.pdf
- rys2.pdf
- ROZDZIAŁY
- rozdz.1.Rmd
- rozdz.2.Rmd
- ...
Kod masterfile.Rmd wygląda następująco:
{r child = '/chapters/chap1.Rmd'}
Kod rozdz.1.Rmd wygląda następująco:

Jak robię na drutach chap1.Rmd
, wszystko jest w porządku. Kiedy robię na drutach masterfile
, otrzymuję następujący komunikat:
[OSTRZEŻENIE] Nie można pobrać zasobu „../figures/fig1.pdf”: PandocResourceNotFound „../figures/fig1.pdf”
Wydaje się, że fig1.pdf
nie można tego znaleźć. Wydaje mi się, że dzieje się tak dlatego, że instrukcja include w pliku głównym tylko „kopiuje” kod chap1.Rmd
i „wykonuje” go w ROOT
katalogu (nie w CHAPTERS
katalogu), więc „..” przechodzi do lokalizacji, która nie istnieje (przed ROOT), gdy z dzianiny masterfile
.
Mógłbym zmienić ustawienie i zapisać 
w chap1.Rmd
pliku. Będzie działać dobrze, gdy robisz na drutach z, masterfile
ale już nie chap1.Rmd
.
Czy wiesz, jak mieć jedno i drugie?
Odpowiedzi
Witamy w społeczności RMarkdown!
Ze względu na współdziałanie KnitR, Rmd i pandoc nie jest to tak łatwe rozwiązanie, jak mogłoby się wydawać, ale restrukturyzacja katalogu byłaby prawie łatwiejsza.
Nawet jeśli spojrzysz na najnowszą książkę autora Rmarkdown RMarkdown Cookbook
TUTAJ . Mają wszystkie rozdziały w ROOT
katalogu i tylko podkatalogi dla obrazów (i być może rysunków).
zasoby:
1. Inne podobne pytanie
2. Opcje Github knitr pytanie
3. podobne pytanie od społeczności Rstudio
Możesz skorzystać z funkcji filtra Lua, aby przepisać ścieżki obrazu podczas łączenia głównego pliku. Na przykład
function Image (img)
img.src = img.src:gsub('^%.%./', './')
return img
end
Spowoduje to zastąpienie ścieżki jak ../figures/fig1.pdf
z ./figures/fig1.pdf
.
Użyj kodu zapisując go do pliku i wywołując dodanie go przez pandoc_args
(tylko w głównym pliku).
---
output:
html_document:
pandoc_args: ["--lua-filter=filter.lua"]
---