Utilisation de chemins relatifs dans Rmarkdown lors du tricot à partir de deux endroits différents
Mon problème est avec l'utilisation de liens relatifs et la "compilation" (tricot).
J'écris un livre en utilisant RMarkdown. Étant donné que le fichier sera relativement volumineux, je dois le diviser en sous-fichiers et répertoires.
J'ai un fichier maître qui ne contient que des liens vers des chapitres (chap1, chap2, ...) Il y a un fichier pour chaque chapitre et chacun a besoin de références à quelques figures (fig1, ...).
Je voudrais pouvoir tricoter masterfile.Rmd et chap1.Rmd indépendamment les uns des autres afin d'obtenir un fichier pour les chapitres et un fichier pour tout le livre.
Voici comment mes fichiers sont organisés (MVE). Les répertoires sont affichés en majuscules.
- RACINE
- masterfile.Rmd
- LES FIGURES
- fig1.pdf
- fig2.pdf
- CHAPITRES
- chap1.Rmd
- chap2.Rmd
- ...
Le code de masterfile.Rmd est le suivant:
{r child = '/chapters/chap1.Rmd'}
Le code de chap1.Rmd est le suivant:

Comme je tricot chap1.Rmd
, tout va bien. En tricotant à partir de masterfile
, je reçois le message suivant:
[AVERTISSEMENT] Impossible de récupérer la ressource '../figures/fig1.pdf': PandocResourceNotFound "../figures/fig1.pdf"
Il semble que fig1.pdf
cela ne puisse pas être trouvé. Je suppose que c'est parce que l'instruction include dans le fichier maître "copie" seulement le code de chap1.Rmd
et "l'exécute" dans le ROOT
répertoire (pas dans le CHAPTERS
répertoire) donc ".." conduit à un emplacement qui n'existe pas (avant ROOT) lorsque tricoté à partir de masterfile
.
Je pourrais changer le réglage et écrire 
dans le chap1.Rmd
fichier. Cela fonctionnerait bien lors du tricotage à partir de masterfile
mais plus à partir de chap1.Rmd
.
Savez-vous comment avoir les deux?
Réponses
Bienvenue dans la communauté RMarkdown!
En raison de l'interfonctionnement de KnitR, Rmd et pandoc, cette solution n'est pas aussi simple que vous le pensez, mais une restructuration de répertoire serait presque plus facile.
Même si vous regardez le dernier livre de l'auteur de Rmarkdown RMarkdown Cookbook
ICI . Ils ont tous les chapitres du ROOT
répertoire, et uniquement des sous-répertoires pour les images (et éventuellement les figures).
Ressources:
1. Autre question similaire SO
2. Question Knitr sur les options de Github
3. question similaire de la communauté Rstudio
Vous pouvez utiliser la fonction de filtre Lua pour réécrire les chemins des images lors du tricotage du fichier principal. Par exemple
function Image (img)
img.src = img.src:gsub('^%.%./', './')
return img
end
Cela remplacera un chemin comme ../figures/fig1.pdf
avec ./figures/fig1.pdf
.
Utilisez le code en l'écrivant dans un fichier et en l'appelant en l'ajoutant via pandoc_args
(dans le fichier principal uniquement).
---
output:
html_document:
pandoc_args: ["--lua-filter=filter.lua"]
---