r - 如何在 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。
解决方案
我设法通过在文档末尾添加一些 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
```
推荐阅读
- java - 实体间的优化关系
- python - 在列表中找到唯一的单词,将它们计数,同时继续跟踪另一个变量
- xml - 从 Apache Velocity 1.5 更新到 2.2 会导致解析错误
- java - Apache POI:在已将行添加到表后修改行
- flutter - Flutter,in_app_purchase 很难测试
- python - 为任意数量的数据框递归添加缺失的数据框列
- c++ - “向量迭代器不兼容。” 如何将它作为参数传递给函数?
- docker - 在 Docker 中运行 ASP.NET WebAPI 应用程序时的 INET_E_RESOURCE_NOT_FOUND
- java - Java多线程变量可见性问题
- c# - 没有这样的列:EPF(代码 1 SQLITE_ERROR)Xamarin android