自定义 bookdown 中的 "edit" link
Customize the "edit" link in bookdown
我使用 bookdown 和 gitbook 输出来构建一本书。用于构建本书的 .Rmd
文件依次从以下工作流中的其他源文件自动生成:R 脚本采用 folder1/file.txt
并生成文件 folder2/file.Rmd
,它位于转用来建书。
到目前为止,还不错。但是,当我在 _bookdown.yaml
中使用 the edit
option 时,link(自然地)指的是 folder2/file.Rmd
。将 folder2
替换为 folder1
并将 .Rmd
替换为 .txt
是一件简单的事情,但我不知道应该从哪里开始。
在 R/html.R(在 bookdown 包中)中,link 是在函数 build_chapter
中生成的,使用 rmd_cur
作为输入(即“当前章节的Rmd文件名") 和函数source_link
.
source_link = function(target, type) {
if (length(target) == 0) return()
setting = source_link_setting(type = type)
if (is.null(setting)) return()
button_link(sprintf(setting$link, target), setting$text)
}
如何使用此信息生成指向 folder1/file.txt
而不是 folder2/file.Rmd
的自定义 link?
如果您希望历史记录和视图也link到文本文件
source_link = function(target, type) {
if (length(target) == 0) return()
setting = source_link_setting(type = type)
if (is.null(setting)) return()
button_link(sprintf(setting$link, sub("folder2/(.+?)\.[Rr]md$", "folder1/\1.txt", target)), setting$text)
}
否则重载 build_chapter
函数:
build_chapter = function(
head, toc, chapter, link_prev, link_next, rmd_cur, html_cur, foot
) {
# add a has-sub class to the <li> items that has sub lists
toc = gsub('^(<li>)(.+<ul>)$', '<li class="has-sub">\2', toc)
paste(c(
head,
'<div class="row">',
'<div class="col-sm-12">',
toc,
'</div>',
'</div>',
'<div class="row">',
'<div class="col-sm-12">',
chapter,
'<p style="text-align: center;">',
button_link(link_prev, 'Previous'),
source_link(sub("folder2/(.+?)\.[Rr]md$", "folder1/\1.txt", rmd_cur), type = 'edit'),
source_link(rmd_cur, type = 'history'),
source_link(rmd_cur, type = 'view'),
button_link(link_next, 'Next'),
'</p>',
'</div>',
'</div>',
foot
), collapse = '\n')
}
我使用 bookdown 和 gitbook 输出来构建一本书。用于构建本书的 .Rmd
文件依次从以下工作流中的其他源文件自动生成:R 脚本采用 folder1/file.txt
并生成文件 folder2/file.Rmd
,它位于转用来建书。
到目前为止,还不错。但是,当我在 _bookdown.yaml
中使用 the edit
option 时,link(自然地)指的是 folder2/file.Rmd
。将 folder2
替换为 folder1
并将 .Rmd
替换为 .txt
是一件简单的事情,但我不知道应该从哪里开始。
在 R/html.R(在 bookdown 包中)中,link 是在函数 build_chapter
中生成的,使用 rmd_cur
作为输入(即“当前章节的Rmd文件名") 和函数source_link
.
source_link = function(target, type) {
if (length(target) == 0) return()
setting = source_link_setting(type = type)
if (is.null(setting)) return()
button_link(sprintf(setting$link, target), setting$text)
}
如何使用此信息生成指向 folder1/file.txt
而不是 folder2/file.Rmd
的自定义 link?
如果您希望历史记录和视图也link到文本文件
source_link = function(target, type) {
if (length(target) == 0) return()
setting = source_link_setting(type = type)
if (is.null(setting)) return()
button_link(sprintf(setting$link, sub("folder2/(.+?)\.[Rr]md$", "folder1/\1.txt", target)), setting$text)
}
否则重载 build_chapter
函数:
build_chapter = function(
head, toc, chapter, link_prev, link_next, rmd_cur, html_cur, foot
) {
# add a has-sub class to the <li> items that has sub lists
toc = gsub('^(<li>)(.+<ul>)$', '<li class="has-sub">\2', toc)
paste(c(
head,
'<div class="row">',
'<div class="col-sm-12">',
toc,
'</div>',
'</div>',
'<div class="row">',
'<div class="col-sm-12">',
chapter,
'<p style="text-align: center;">',
button_link(link_prev, 'Previous'),
source_link(sub("folder2/(.+?)\.[Rr]md$", "folder1/\1.txt", rmd_cur), type = 'edit'),
source_link(rmd_cur, type = 'history'),
source_link(rmd_cur, type = 'view'),
button_link(link_next, 'Next'),
'</p>',
'</div>',
'</div>',
foot
), collapse = '\n')
}