2つの異なる場所から編み物をするときにRmarkdownで相対パスを使用する
私の問題は、相対リンクの使用と「コンパイル」(編み物)にあります。
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のコードは次のとおりです。

私が編み物をしているchap1.Rmd
ので、すべてが大丈夫です。から編むとmasterfile
、次のメッセージが表示されます。
[警告]リソース '../figures/fig1.pdf'をフェッチできませんでした:PandocResourceNotFound "../figures/fig1.pdf"
と思われるfig1.pdf
見つけることができません。これは、マスターファイルのincludeステートメントがコードを「コピー」chap1.Rmd
してROOT
ディレクトリ(CHAPTERS
ディレクトリではなく)で「実行」するだけなので、「..」が存在しない場所(ROOTの前)に移動するためだと思います。から編まれたmasterfile
。
設定を変更
してchap1.Rmd
ファイルに書き込むことができました。から編み物をするときmasterfile
は問題なく動作しchap1.Rmd
ますが、からは動作しなくなります。
あなたは両方を持つ方法を知っていますか?
回答
RMarkdownコミュニティへようこそ!
KnitR、Rmd、およびpandocの相互作用により、これは思ったほど簡単な解決策ではありませんが、ディレクトリの再構築はほとんど簡単です。
Rmarkdown作者の最新の本をRMarkdown Cookbook
ここで見ても。ROOT
ディレクトリにはすべての章があり、画像(および場合によっては図)のサブディレクトリのみがあります。
リソース:
1.他のSO同様の質問
2.Githubオプションニットの質問
3.Rstudioコミュニティからの同様の質問
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"]
---