Получать фрагменты кода Sweave внутри какой-нибудь рамки? - PullRequest
4 голосов
/ 18 января 2012

Я хотел бы сделать фрагмент кода R (в Sweave), напечатанный внутри рамки в результирующем PDF-файле.

Есть ли простое решение для этого?

Ответы [ 2 ]

7 голосов
/ 18 января 2012

Короткий ответ: да, есть простой способ.Просто добавьте следующие строки или что-то вроде этого в преамбулу вашего документа Sweave:

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

Это работает, потому что появление фрагментов кода (и вывода) контролируется определением Sinput и Soutput среды.Это обе среды Verbatim, предоставляемые пакетом LaTeX fancyvrb.( Нажмите здесь для 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}

enter image description here

2 голосов
/ 15 мая 2012

knitr, преемник Sweave, по умолчанию выводит весь повторяющийся код R в ячейки, а также форматирует его в поля.Другие полезные функции включают окраску синтаксиса и интеграцию PGF.

Sweave код средней сложности требует лишь незначительных изменений, если какие-либо адаптации работают с knitr.

...