【问题标题】:How can I add a class attribute to the `<ul>` tag in the automated table of contents in Rmarkdown?如何将类属性添加到 Rmarkdown 自动目录中的 `<ul>` 标记?
【发布时间】:2020-03-17 12:23:41
【问题描述】:

我工作的组织有一个用于我们网站的 HTML 模板。我在 R markdown 中将此模板用作自定义 HTML 模板:

---
title: "My report"
output:
  html_document:
    template: my-template.html
    toc: true
---

以下是我们网站的 HTML 模板的 sn-p。与模板中的其他所有内容一样,目录遵循我所在组织的样式指南。目录的 HTML 代码是这样的:

    <div class="panel-body">
        <ul class="sidebar-items">
            <li><a href="#">header 1</a></li>
            <li><a href="#">Header 2</a></li>
            <li><a href="#">Header 3</a></li>
        </ul>
    </div>

我需要通过插入 pandoc 变量来自定义这个模板,以便我可以在 Rmarkdown 中将它用作我的 html 模板。

我的问题是这样的:我怎样才能做到这一点并且仍然在&lt;ul&gt; 标签中保留class="sidebar-items" 属性?

我试过了:

    <div class="panel-body">
        <ul class="sidebar-items">
          $toc$
        </ul>
    </div>

但结果当然是多了一对&lt;ul&gt;-tags:

    <div class="panel-body">
        <ul class="sidebar-items">
          <ul>
            <li><a href="#header-1">header 1</a></li>
            <li><a href="#header-1">header 2</a></li>
            <li><a href="#header-3">header 3</a></li>
        </ul>
      </ul>
    </div>

如何防止这种情况,但仍包含class="sidebar-items" 属性?

我可以在 Rmarkdown 的输出 HTML 文件中手动更改它,但问题是我 需要创建许多 HTML 文件,我非常想避免这个额外的手册 工作。

非常感谢您的帮助!

【问题讨论】:

  • 目前,pandoc 在其内部 AST 中不支持 OrderedList 的属性。因此,将其直接添加到ul 的唯一方法是对输出进行后处理,或者使用 pandoc-filter 注入一些 RawBlock 'html'

标签: html r r-markdown pandoc


【解决方案1】:

正如@mb21 在 cmets 中指出的那样:目前没有(简单的)方法可以通过 pandoc 实现。您可以使用pandoc filter 自己创建目录,但这会有点费力。

我建议要么

  • 后处理 HTML 输出,
  • 添加 JavaScript sn-p 以插入所需的类或
  • 重写依赖于sidebar-items 类的CSS/JS 代码以使用不同的选择器。

【讨论】:

  • 感谢您的建议,@tarleb!您是否有一个资源链接来解释如何通过添加 JavaScript sn-p 来插入类?
  • stackoverflow.com/questions/195951,但您需要使用querySelector 而不是getElementById。这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 2012-06-19
相关资源
最近更新 更多