我是 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
来执行代码,列出它并显示真实的结果。
\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
: