Непрерывная нумерация строк с Sweave и списками - PullRequest
2 голосов
/ 06 апреля 2011

Я пишу отчет в LaTeX, встраивая несколько R-скриптов, которые представлены в несмежных фрагментах Sweave.

Я нашел несколько довольно полезных комментариев к Stackoverflow о том, как настроить Sweave и списки для выделения кода и строк нумерации. Я изменил исходный пакет sweave.sty следующим образом, чтобы воспользоваться списками , избегая при этом обременения моих документов LaTeX слишком большим количеством настроек.

В принципе, у меня проблемы с параметрами нумерации строк. В соответствии с настройкой (firstnumber = last) строки пронумерованы по всему документу. Если я установлю firstnumber = auto, нумерация возобновляется с 1 для каждого фрагмента кода 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 Ответ

1 голос
/ 06 апреля 2011

Я на самом деле нашел псевдо-решение.

Прежде чем начинать кусок кода, открывающий новый скрипт, введите следующие строки кода:

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

Это не даст никакоговидимый вывод в документе и сбросит нумерацию строк следующего блока на 1 (или любое другое желаемое число).

Нет необходимости говорить, что любые более элегантные решения все же приветствуются!

...