2

私はいくつかの R スクリプトを埋め込んで、LaTeX でレポートを書いています。これらは、連続していない Sweave チャンクでレポートされます。

Sweaveリストパッケージをカスタマイズしてコードと行番号を強調表示する方法について、Stackoverflow で非常に役立つコメントを見つけました。元のsweave.styパッケージを次のように変更して、LaTeX ドキュメントに多くの設定を負担させずにリストを利用できるようにしました。

基本的に、行番号付けオプションに問題があります。設定どおり (firstnumber=last)、ドキュメント全体で行に番号が付けられます。firstnumber=auto を設定すると、番号付けは R コードの各チャンクで 1 から再開されます。

\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 がバックグラウンドで行うためです。

提案は大歓迎です!

4

1 に答える 1

1

私は実際に疑似ソリューションを見つけました。

新しいスクリプトを開くコードのチャンクを開始する前に、次のコード行を入力します。

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

これにより、ドキュメントに表示される出力は生成されず、次のチャンクの行番号が1(またはその他の必要な番号)にリセットされます。

言うまでもなく、これ以上のエレガントなソリューションは大歓迎です。

于 2011-04-06T15:28:21.383 に答える