2012-01-26 8 views
2

Я хотел бы найти способ использования метки LaTeX \ref{} для комментариев в R-коде в файле Sweave .Rnw. Вот два примера, один в печатиДинамические ссылки на цифры в комментарии R в документе Sweave

http://cm.bell-labs.com/cm/ms/departments/sia/project/nlme/UGuide.pdf

и один, чтобы использовать для работы с:

.Rnw файл

% File: example.Rnw 

\documentclass{article} 
\usepackage{fullpage} 
\usepackage{graphics} 
\usepackage{Sweave} 
\usepackage[margin = 10pt, font=small, labelfont={bf}]{caption} 

\begin{document} 

Here is an example file to show what I want to do. I would like to figure out how to use the \LaTeX\ reference command to reference a figure being generated by R code. Note in the R code, in a comment there is a reference to the figure, but of course the output file shows a verbatim copy of the \LaTeX\ markup. Does anyone know how to get something for Figure \ref{fig2}? 

<< example plot >>= 
library(reshape) 
library(ggplot2) 

n <- 100 
lambda <- 1/3 
x <- seq(0, qexp(0.999, rate = lambda), length = n) 
q1.a <- data.frame(x = x, 
        f = dexp(x, rate = lambda), 
        F = pexp(x, rate = lambda)) 

q1.a <- melt(q1.a, id.vars = 'x') 
g <- ggplot(q1.a) +          # Produces \ref{fig1} 
     aes(x = x, y = value) + 
     geom_line() + 
     facet_wrap(~ variable, scale = "free_y") 
ggsave(g, filename = "example1.jpeg")      
@ 

\begin{figure}[h] 
\centering 
\includegraphics[width = 0.48\textwidth]{./example1} 
\caption{Exponential Distribution based plots.} 
\label{fig1} 
\end{figure} 

Here is more of what I would like to see: 

<< example plot 2 >>= 
ggsave(g + geom_point(), filename = "example2.jpeg") # Produces Figure 2 
@ 

\begin{figure} 
\centering 
\includegraphics[width = 0.48\textwidth]{./example2} 
\caption{Exponential Distribution based plots with points and lines.} 
\label{fig2} 
\end{figure} 

\end{document} 

и PDF построен с R команды

Sweave(file = 'example.Rnw', 
     engine = "R", 
     keep.source = 'TRUE', 
     echo = 'TRUE', 
     results = 'verbatim') 

tools::texi2dvi(file = "example.tex", 
       pdf = TRUE, 
       clean = TRUE) 

Любое понимание того, как это было бы здорово.

+0

Вы можете использовать 'brew' для обработки файла' Rnw' перед 'Sweave'. – baptiste

+1

Список вводов/кода Sweave - это вариант в verbatim environment, чтобы не пытаться интерпретировать код R как LaTeX. Вы хотите, чтобы комментарии к коду «R» интерпретировались как LaTeX. Я не знаю, как, но, может быть, эта перефразировка поможет с решением. –

+0

@BrianDiggs Хорошая точка. Ваш комментарий привел меня к решению, которое я опубликовал. Просто требуется другая 'verbatim' среда, которая позволяет' LaTeX' анализировать некоторый токен. – Ramnath

ответ

1

Вот один из способов решения этой проблемы путем переопределения среды Sinput, в которой исходный код завернут Sweave. По умолчанию это простая среда verbatim, которая не обрабатывается latex для токенов. Трюк состоит в том, чтобы переопределить его, чтобы использовать среду alltt, которая позволяет анализировать токены в среде alltt. Обратите внимание, что это может привести к нежелательным побочным эффектам, о которых я не знаю, поэтому используйте их с осторожностью!

Вот воспроизводимый пример, который работает. Если вы скомпилируете его, вы сгенерируете файл, где ref{fig1} будет заменен цифрой.

\documentclass{article} 
\usepackage{Sweave} 
\usepackage{alltt} 
\renewenvironment{Sinput}{\begin{alltt}}{\end{alltt}} 

\begin{document} 

In this document, we will create a plot using `R`, and reference its position in 
the source code. 

<<produce-plot, results = hide>>= 
pdf('example1.pdf') 
plot(1:10, 1:10)  # Produces Figure \ref{fig1} 
dev.off() 
@ 

\begin{figure} 
\includegraphics{example1.pdf} 
\caption{Figure 1} 
\label{fig1} 
\end{figure} 

\end{document} 
Смежные вопросы