2つの異なる場所から編み物をするときにRmarkdownで相対パスを使用する

Nov 20 2020

私の問題は、相対リンクの使用と「コンパイル」(編み物)にあります。

RMarkdownを使って本を書いています。ファイルは比較的大きくなるので、サブファイルとディレクトリに分割する必要があります。

チャプター(chap1、chap2、...)へのリンクのみを含むマスターファイルがあります。各章のファイルがあり、それぞれにいくつかの図への参照が必要です(図1、...)。

masterfile.Rmdとchap1.Rmdを互いに独立して編成して、章用に1つのファイル、本全体用に1つのファイルを取得できるようにしたいと思います。

これが私のファイルがどのように編成されているか(MVE)です。ディレクトリは大文字で表示されます。

  • ルート
    • masterfile.Rmd
    • フィギュア
      • fig1.pdf
      • fig2.pdf
      • chap1.Rmd
      • chap2.Rmd
      • ..。

masterfile.Rmdのコードは次のとおりです。

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

chap1.Rmdのコードは次のとおりです。

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

私が編み物をしているchap1.Rmdので、すべてが大丈夫です。から編むとmasterfile、次のメッセージが表示されます。

[警告]リソース '../figures/fig1.pdf'をフェッチできませんでした:PandocResourceNotFound "../figures/fig1.pdf"

と思われるfig1.pdf見つけることができません。これは、マスターファイルのincludeステートメントがコードを「コピー」chap1.RmdしてROOTディレクトリ(CHAPTERSディレクトリではなく)で「実行」するだけなので、「..」が存在しない場所(ROOTの前)に移動するためだと思います。から編まれたmasterfile

設定を変更![](/figures/fig1.pdf)してchap1.Rmdファイルに書き込むことができました。から編み物をするときmasterfileは問題なく動作しchap1.Rmdますが、からは動作しなくなります。

あなたは両方を持つ方法を知っていますか?

回答

1 DanielJachetta Nov 20 2020 at 22:37

RMarkdownコミュニティへようこそ!

KnitR、Rmd、およびpandocの相互作用により、これは思ったほど簡単な解決策ではありませんが、ディレクトリの再構築はほとんど簡単です。

Rmarkdown作者の最新の本をRMarkdown Cookbookここで見ても。ROOTディレクトリにはすべての章があり、画像(および場合によっては図)のサブディレクトリのみがあります。

リソース:

1.他のSO同様の質問

2.Githubオプションニットの質問

3.Rstudioコミュニティからの同様の質問

tarleb Nov 21 2020 at 18:24

Luaフィルター機能を利用して、メインファイルを編むときに画像パスを書き換えることができます。例えば

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

これにより、のようなパス../figures/fig1.pdf./figures/fig1.pdf。に置き換えられます。

それをファイルに書き込み、それを介して追加することを呼び出すコードを使用しますpandoc_args(メインファイルのみ)。

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