使用knitr为R代码添加行号

MYa*_*208 13 latex r sweave knitr rnw

我不知道是否有把任何功能line numbersknitr.Rnw.我发现了这个讨论和这些文件(这里这里),但找不到放置行号的方法.任何帮助将受到高度赞赏.谢谢

Tho*_*mas 12

此解决方案使用LaTeX 列表包来创建行号.我只能通过累积所有代码块来让它们工作,但我想有一个类似的解决方案,它将枚举每个块中的行.这是.Rnw来源:

\documentclass{article}
\usepackage{listings}
\begin{document}

<<setup, echo=FALSE>>=
knit_hooks$set(source = function(x, options) {
    paste("\\begin{lstlisting}[numbers=left, firstnumber=last]\n", x, 
        "\\end{lstlisting}\n", sep = "")
})
@

<<a, results='hold'>>=
1:2
3:4
5:6
@

<<b>>=
"test1"
"test2"
"test3"
@

\end{document}
Run Code Online (Sandbox Code Playgroud)

其中的关键部分是在源钩子中,它基本上是从这里复制的.该firstnumber=last通知列表跨房源累积行号.没有它,所有行都编号为1,因为knitr将每个代码行放在它自己的列表中.

这是结果:

在此输入图像描述

如果您希望每个代码块从1开始编号,请添加一个钩子来重置计数器:

knit_hooks$set(reset = function(before, options, envir){
if(before){
    return("\\setcounter{lstnumber}{1}")
}
})
Run Code Online (Sandbox Code Playgroud)

然后使用reset=TRUE激活你想要的每个块中的钩子:

<<a, results='hold', reset=TRUE>>=
1:2
3:4
@
Run Code Online (Sandbox Code Playgroud)