在 LaTeX 中创建 R 代码,可直接在 R 中复制和执行

在 LaTeX 中创建 R 代码,可直接在 R 中复制和执行

我想在 latex 文档中创建 R 代码,当复制到 R 环境中时,该代码可直接执行。我使用以下 MWE,但 R无法正确解释<-*。有没有办法告诉 LaTeX 在这种情况下使用不同的符号,然后可以直接在 R 中使用。这只是一个简短的示例,让学生可以选择尝试 R,所以我不能指望他们对 R 有任何了解,因此它应该很容易执行。

\documentclass[a4paper,12pt,headsepline,automark]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

\usepackage{amssymb}
\usepackage{gensymb}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage{listings}
\usepackage{hyperref}

\begin{document}
%\maketitle

\begin{lstlisting}[language=R,inputencoding={utf8},extendedchars=false, escapeinside={(*}{*)}]

 A <- matrix(c(0.15, 0.01, 0,
               0.14, 0.36, 0.07,
               0.15, 0.13, 0.3), ncol = 3, byrow = TRUE)
 I = diag(nrow = nrow(A))

 I%*%A
 I  %(*$\ast$*)% A
\end{lstlisting}
\end{document}

答案1

至少对我来说,使用minted可以得到一个 PDF,其中复制的代码可以工作。minted使用pygments进行实际突出显示,因此您必须在shell-escape启用的情况下进行编译,例如pdflatex --shell-escape filename.tex。使用代码

\documentclass[a4paper,12pt,headsepline,automark]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{gensymb}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{lmodern}
\usepackage{minted}
\usepackage{hyperref}
\begin{document}
\begin{minted}{R}

 A <- matrix(c(0.15, 0.01, 0,
               0.14, 0.36, 0.07,
               0.15, 0.13, 0.3), ncol = 3, byrow = TRUE)
 I = diag(nrow = nrow(A))

 I%*%A
\end{minted}
\end{document}

我得到了输出

PDF 输出

从 PDF 复制到 RStudio 中的控制台,我得到以下控制台输出:

> 
> A <- matrix(c(0.15, 0.01, 0,
+               0.14, 0.36, 0.07,
+               0.15, 0.13, 0.3), ncol = 3, byrow = TRUE)
> I = diag(nrow = nrow(A))
> I%*%A
     [,1] [,2] [,3]
[1,] 0.15 0.01 0.00
[2,] 0.14 0.36 0.07
[3,] 0.15 0.13 0.30
> 
> 

答案2

正如评论中所建议的,我只是将评论添加为答案。 可以直接使用正确的unicode符号来完成,即%(*\symbol{"002A}*)%并按(*\symbol{"002D}*)预期工作。

相关内容