使用Sweave和列表进行非连续行编号

时间:2011-04-06 13:23:41

标签: r latex sweave listings

我正在LaTeX中编写一个报告,嵌入了几个R脚本,这些脚本以非连续的Sweave块报告。

我在Stackoverflow上发现了一些关于如何自定义 Sweave 列表包以突出显示代码和编号行的非常有用的评论。 我修改了原始的 sweave.sty 包,如下所示,以利用列表,同时避免使用太多设置来加重我的LaTeX文档。

基本上,我在使用行编号选项时遇到问题。按照配置(firstnumber = last),行在文档中逐步编号。 如果我设置firstnumber = auto,则编号在每个R代码块重新开始。

\RequirePackage[T1]{fontenc}
\RequirePackage{graphicx,ae,fancyvrb}
\IfFileExists{upquote.sty}{\RequirePackage{upquote}}{}
\setkeys{Gin}{width=0.8\textwidth}
\DefineVerbatimEnvironment{Scode}{Verbatim}{fontshape=sl, fontsize=\small}

\newenvironment{Schunk}{}{}

\usepackage{listings}
\newcommand{\indexfonction}[1]{\index{#1@\texttt{#1}}}
\usepackage[usenames,dvipsnames]{color}

\definecolor{gris90}{gray}{0.95}

\lstdefinelanguage{Renhanced}[]{R}{%
   sensitive,%
   morecomment=[l]\#,%
   morestring=[d][\color{RoyalPurple}]",%
   morestring=[d][\color{RoyalPurple}]',
  alsoletter={.\%_},
  alsoother={:_\$}}

\lstset{language=Renhanced,extendedchars=false,
  basicstyle=\small\ttfamily, 
  columns=flexible,
  commentstyle=\textsl,
  numbers=left, 
  numberstyle=\small \ttfamily,
  keywordstyle=\mdseries,
  showstringspaces=false,
  index=[1][keywords], 
  indexstyle=\indexfonction}


\lstnewenvironment{Sinput}[1][]{
 \lstset{%
   language={Renhanced},
   basicstyle=\small \ttfamily,
   columns=flexible,  
   frame=single,                             
   backgroundcolor=\color{gris90},           
   numbers=left, 
   numberstyle=\small \ttfamily,
   firstnumber=last,
   #1
 }
}{}
\lstnewenvironment{Soutput}[1][]{
 \lstset{%
   language={Renhanced},
   basicstyle=\small \ttfamily, 
   columns=flexible,
   numbers=right, 
   numberstyle=\tiny,
   firstnumber=last,
   #1
 }
}{}

我想找到一个中间解决方案,其中编号在同一脚本的不同块中进行,但在不同脚本的开头重新启动表单1(可能通过手动指定)。

我认为麻烦的是,我无法手动指定列表的名称,因为Sweave在后台执行此操作。

欢迎提出建议!

1 个答案:

答案 0 :(得分:1)

我实际上找到了一个伪解决方案。

在开始打开新脚本的代码块之前,请键入以下代码行:

\begin{lstlisting}[firstnumber=1] 
\end{lstlisting}

这不会在文档中产生任何可见的输出,并会将以下块的行号重置为1(或任何其他所需的数字)。

毋庸置疑,仍然欢迎任何更优雅的解决方案!