Utilisation de chemins relatifs dans Rmarkdown lors du tricot à partir de deux endroits différents

Nov 20 2020

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:

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

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.pdfcela 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.Rmdet "l'exécute" dans le ROOTrépertoire (pas dans le CHAPTERSrépertoire) donc ".." conduit à un emplacement qui n'existe pas (avant ROOT) lorsque tricoté à partir de masterfile.

Je pourrais changer le réglage et écrire ![](/figures/fig1.pdf)dans le chap1.Rmdfichier. Cela fonctionnerait bien lors du tricotage à partir de masterfilemais plus à partir de chap1.Rmd.

Savez-vous comment avoir les deux?

Réponses

1 DanielJachetta Nov 20 2020 at 22:37

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 CookbookICI . Ils ont tous les chapitres du ROOTré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

tarleb Nov 21 2020 at 18:24

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.pdfavec ./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"]
---