在 Latex 段落中包含 R 代码的最佳方法是什么

在 Latex 段落中包含 R 代码的最佳方法是什么

我是 Latex 新手。我有两个关于在 Latex 中包含 R 代码的简单问题。

Q1:对于一块 R 代码,我使用“listings”包,如下所示。

\documentclass[12pt]{report}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=R]
> dpareto(4, 2, 3)
[1] 0.09375
> dpareto(4, -2, 3)
[1] NaN
> dpareto(seq(-1, 4, 1), 2, 3)
[1] 0.0000000 0.0000000 0.0000000 0.0000000 0.2962963 0.0937500
\end{lstlisting}
\end{document}

我觉得不太专业。如何最好地呈现 R 代码块?

Q2:对于段落中的代码片段,例如我希望在我的 Latex 上下文中包含一个 R 函数、变量或包名称,最好的方法是什么?

答案1

比列出 R 代码更好,你可以创建一个my_sweave_file.Rnw文件并编译它 knitr来执行代码,列出它并显示真实的结果。

3型

\documentclass[a4paper]{article}
\parindent0pt
\begin{document}
Knitr test in \LaTeX.

<<Test>>= 

dpareto <- function(x, location, shape, log = FALSE) {
    if (!is.logical(log.arg <- log) || length(log) != 1)
        stop("bad input for argument 'log'")
    rm(log)

    L = max(length(x), length(location), length(shape)) 
    x = rep(x, length.out = L);
    location = rep(location, length.out = L);
    shape = rep(shape, length.out = L)

    logdensity = rep(log(0), length.out = L)
    xok = (x > location)
    logdensity[xok] = log(shape[xok]) + 
            shape[xok] * log(location[xok]) -
            (shape[xok]+1) * log(x[xok])
    if (log.arg) logdensity else exp(logdensity)
}

dpareto(4, 2, 3)
dpareto(4, -2, 3) 
dpareto(seq(-1, 4, 1), 2, 3)
@ 
Done. 
\end{document}

要编译此.Rnw 文件,您可以执行以下操作:

Rscript -e "library(knitr); knit('my_sweave_file.Rnw')"
pdflatex my_sweave_file.tex

但是使用 RStudio 或 LyX 这样的编辑器,您可以直接编译这些文件。

请注意,您列出的 MWE 的 R 代码令人困惑且不可重现,因为您没有解释其来源dpareto()。如果您使用该库 PtProcess而不是上面列出的函数,结果将截然不同:

平均能量损失

\documentclass{article}
\parindent0pt
\begin{document}

Knitr test in \LaTeX.

{\footnotesize
<<Test, tidy=TRUE>>= 
library(PtProcess) 
dpareto(4, 2, 3)
dpareto(4, -2, 3) 
dpareto(seq(-1, 4, 1), 2, 3)
@ 
}

Done. The true first result is \Sexpr{dpareto(4, 2, 3)}, not 0.09375
as showed in the MWE.

\end{document}

或者使用图书馆actuar

微波辐射计

相关内容