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)