在某个框架框中获取 Sweave 代码块?

发布于 2024-12-27 10:53:37 字数 66 浏览 1 评论 0原文

我想在生成的 pdf 中的框架框中打印 R 代码块(在 Sweave 中)。

有一个简单的解决方案吗?

I would like to make an R code chunk (in Sweave) printed inside a framed box in the resulting pdf.

Is there an easy solution for doing that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

躲猫猫 2025-01-03 10:53:37

简短的回答是,是的,有一个简单的方法。只需将以下几行或类似内容添加到 Sweave 文档的序言中即可:

\DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
                                              frame=single}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
                                              frame=single}

这是有效的,因为代码(和输出)块的外观是由 SinputSoutput 的定义控制的环境。这些都是 LaTeX 包 fancyvrb 提供的 Verbatim 环境。 (点击此处查看 73 页的 pdf 描述fancyvrb 提供的众多选项)。

快速浏览一下文件 Sweave.sty 即可发现这两个环境的默认定义:

\DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{}
\DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl}

要更改这些定义,只需添加您自己设计的 \DefineVerbatimEnvironment 语句:( ) 在 Sweave.sty 文件末尾;或 (b) 在 *.Snw 文档的开头。


最后,这里有一个示例来展示实践中的情况:

\documentclass[a4paper]{article}

\usepackage{Sweave}

\DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
                                              frame=single}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
                                              frame=single}
\title{Sweave with boxes}

\begin{document}
\maketitle

<<echo=FALSE>>=
options(width=60)
@

Here is an example of a code chunk followed by an output chunk,
both enclosed in boxes.

<<>>=
print(rnorm(99))
@

\end{document}

在此处输入图像描述

The short answer is that yes, there is an easy way. Just add the following lines, or something like them to the preamble of your Sweave document:

\DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
                                              frame=single}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
                                              frame=single}

This works because the appearance of code (and output) chunks is controlled by the definition of the Sinput and Soutput environments. These are both Verbatim environments as provided by the LaTeX package fancyvrb. (Click here for a 73 page pdf describing the numerous options that fancyvrb provides).

A quick look in the file Sweave.sty reveals the default definition of those two environments:

\DefineVerbatimEnvironment{Sinput}{Verbatim}{fontshape=sl}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{}
\DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl}

To change those definitions, just add \DefineVerbatimEnvironment statements of your own devising either: (a) at the end of the Sweave.sty file; or (b) at the start of your *.Snw document.


Finally, here's an example to show what this looks like in practice:

\documentclass[a4paper]{article}

\usepackage{Sweave}

\DefineVerbatimEnvironment{Sinput}{Verbatim} {xleftmargin=2em,
                                              frame=single}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{xleftmargin=2em,
                                              frame=single}
\title{Sweave with boxes}

\begin{document}
\maketitle

<<echo=FALSE>>=
options(width=60)
@

Here is an example of a code chunk followed by an output chunk,
both enclosed in boxes.

<<>>=
print(rnorm(99))
@

\end{document}

enter image description here

能否归途做我良人 2025-01-03 10:53:37

knitrSweave 的后继者,默认输出所有 R 代码都回显在框中,并将其格式化到页边距。其他不错的功能包括语法着色和 PGF 集成。

平均复杂度的 Sweave 代码只需进行很小的调整即可与 knitr 一起运行。

knitr, a successor of Sweave, by default outputs all echoed R code in boxes, and also formats it to the margins. Other nice features include syntax coloring and PGF integration.

Sweave code of average complexity needs only minor if any adaptions to run with knitr.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文