【问题标题】:Customize the "edit" link in bookdown自定义 bookdown 中的“编辑”链接
【发布时间】:2020-12-13 20:01:21
【问题描述】:

我使用 bookdown 和 gitbook 输出来构建一本书。用于构建本书的.Rmd 文件依次从以下工作流程中的其他源文件自动生成:R 脚本采用folder1/file.txt 并生成文件folder2/file.Rmd,该文件又用于构建本书.

到目前为止,一切都很好。但是,当我在_bookdown.yaml 中使用the edit option 时,链接(自然)指的是folder2/file.Rmd。将folder2 替换为folder1 并将.Rmd 替换为.txt 将是一件简单的事情,但我不知道我应该从哪里开始。

R/html.R(在bookdown 包中)中,链接是在函数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 的自定义链接?

【问题讨论】:

    标签: r blogdown gitbook


    【解决方案1】:

    如果您希望历史记录和视图也链接到文本文件

    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')
    }
    

    【讨论】:

    • 这听起来很有希望!你会通过分叉 repo 并维护你自己的包版本来实现这一点吗?或者有没有更简单的方法,例如通过使用自定义版本的build_chapter 运行render_book
    • 只要运行新的build_chapter 就会自动重载默认的bookdown 代码,就像他们直接调用它一样
    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多