在 R 中,注释前面带有符号#
。此外,为了避免弄乱缩进,通常使用##
而不是#
。因此,当我想在 LaTeX 文档中包含一些 R 代码时,我使用了listings
带有这些说明。但是,这给出了以下错误:
Illegal parameter number in definition of \lst@rangebegin
以下是 R 代码:
##--GOLL0----
GetObsLogLik <- function(data, w, mu, sigma){
N <- nrow(data)
S <- ncol(data)
K <- nrow(mu)
sum(sapply(1:N, function(i){
log(sum(sapply(1:K, function(k){
w[k] * dmvnorm(x=data[i,], mean=mu[k,],
sigma=sigma[k]^2 * diag(S))
})))
}))
}
##--GOLL1----
以下是 LaTeX 代码:
\documentclass{article}
\usepackage{listings}
\lstset{language=R,
frame=single,
basicstyle=\small,
rangeprefix=##--,
rangesuffix=----,
includerangemarker=false}
\begin{document}
\lstinputlisting[linerange=GOLL0-GOLL1]{test.R}
\end{document}
##
当我用替换时,错误消失了//
。但这不是一个解决方案,因为//
在 R 中无效。我也尝试了提供的解决方案这里但它也不起作用。
答案1
问题不在于 R 源代码,而在于您#
在选项中使用了特殊字符 ( ) \lstset
。请尝试使用\#\#
。