首页 > 解决方案 > 如何在 Rmarkdown 中添加跨块的行号?

问题描述

我想在我的 Rmarkdown 文件的 HTML 输出中添加代码行编号。我会对任何唯一标识输出中每一行代码的方法感到满意(例如,在整个文档中递增的连续行号,或者代码块由它们自己的索引标识,并且在这些代码块中,行号从1)。

我一直无法做到这一点。

使用其他 stackoverflow 答案和这篇博客文章,我得到了行号,但它们会随着每个新块而重置。

我有以下 Rmd 文件:

---
output:
  html_document:
    highlight: kate
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  class.source = "numberLines lineAnchors"
  )
```

```{r}
5 + 5
3 * 9
```

```{r}
x <- 5
x * 3
```

编译为:

如您所见,当一个块被输出拆分或一个新块开始时,行号会重置。我希望看到的是行号为 1、2、3、4,而不是 1、1、1、2。

有谁知道如何让它工作? 当块被拆分或新块时行号重置

标签: rr-markdownpandoc

解决方案


我设法通过在文档末尾添加一些 jquery 来获取 HTML 文档上的连续行号Rmd

---
output:
  rmdformats::html_clean:
    highlight: kate
    toc: true
    use_bookdown: true
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  class.source = "numberLines lineAnchors"
  )
```

```{r}
5 + 5
3 * 9
```

```{r}
x <- 5
x * 3
```

<!-- 
The javascript below will reset the line numbers when
the document loads. 
-->

<script>
$(function() {
  $(".sourceLine").each( function( index ){
    $( this ).attr( "data-line-number", index + 1 );
  });
});
</script>

生成的文档具有连续的行号,如下所示: 跨块的连续行号

这有点 hacky,因为它需要 jquery(可能是一种通过包含一些覆盖现有的 css 来做到这一点的方法),但它可以工作并且看起来很整洁。

2020 年 8 月 4 日更新

他们改变了行号的工作方式(现在它基于 CSS 计数器)。为了让它现在在整个文档中按顺序工作,您需要插入一些 CSS。下面是一个完整的工作示例。重要的代码在<style>块中。它在body(文档)级别重置相关计数器,并防止计数器为每个代码块重置。

---
output:
  rmdformats::html_clean:
    highlight: kate
    toc: true
    use_bookdown: true
---

<style>
body
  { counter-reset: source-line 0; }
pre.numberSource code
  { counter-reset: none; }
</style>

```{r setup, include=FALSE}
knitr::opts_chunk$set(
  class.source = "numberLines lineAnchors"
  )
```

```{r}
5 + 5
3 * 9
```

```{r}
x <- 5
x * 3
```


推荐阅读