从两个不同位置编织时在 Rmarkdown 中使用相对路径
Using relative paths in Rmarkdown when knitting from two different locations
我的问题是使用相关链接和“编译”(编织)。
我正在使用 RMarkdown 写一本书。由于文件会比较大,所以需要拆分成子文件和目录。
我有一个主文件,其中仅包含指向章节(第 1 章、第 2 章...)的链接。每章都有一个文件,每章都需要引用一些图(图 1,...)。
我希望能够相互独立地编织 masterfile.Rmd 和 chap1.Rmd 以便为章节获得一个文件,为整本书获得一个文件。
这是我的文件的组织方式 (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
目录)中“执行”它,所以“ .." 从 masterfile
.
编织时驱动到不存在的位置(在 ROOT 之前)
我可以更改设置并在 chap1.Rmd
文件中写入 ![](/figures/fig1.pdf)
。从 masterfile
编织时它会工作正常但不再从 chap1.Rmd
.
编织时
你知道如何两者兼得吗?
欢迎来到 RMarkdown 社区!
由于 KnitR、Rmd 和 pandoc 的相互作用,这个解决方案并不像您想象的那么容易,但目录重组几乎会更容易。
即使你看了 Rmarkdown 作者的最新书RMarkdown Cookbook
HERE。他们在 ROOT
目录中有所有章节,只有图像(可能还有数字)的子目录。
资源:
您可以利用Lua filter功能在编织主文件时重写图像路径。例如
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"]
---
我的问题是使用相关链接和“编译”(编织)。
我正在使用 RMarkdown 写一本书。由于文件会比较大,所以需要拆分成子文件和目录。
我有一个主文件,其中仅包含指向章节(第 1 章、第 2 章...)的链接。每章都有一个文件,每章都需要引用一些图(图 1,...)。
我希望能够相互独立地编织 masterfile.Rmd 和 chap1.Rmd 以便为章节获得一个文件,为整本书获得一个文件。
这是我的文件的组织方式 (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
目录)中“执行”它,所以“ .." 从 masterfile
.
我可以更改设置并在 chap1.Rmd
文件中写入 ![](/figures/fig1.pdf)
。从 masterfile
编织时它会工作正常但不再从 chap1.Rmd
.
你知道如何两者兼得吗?
欢迎来到 RMarkdown 社区!
由于 KnitR、Rmd 和 pandoc 的相互作用,这个解决方案并不像您想象的那么容易,但目录重组几乎会更容易。
即使你看了 Rmarkdown 作者的最新书RMarkdown Cookbook
HERE。他们在 ROOT
目录中有所有章节,只有图像(可能还有数字)的子目录。
资源:
您可以利用Lua filter功能在编织主文件时重写图像路径。例如
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"]
---