我一直关注类似帖子的例子,但无济于事。 这是我看到的问题的一个例子。
保存在tmp.Rnw:
\documentclass[10pt]{article}
\title{Reproducible Example}
\begin{document}
\maketitle
\begin{center}
<<echo=FALSE,results=hide>>=
library(ggplot2)
plot.to.print = qplot( 1:10, 1:10 )
@
\section{No Figure Below This Section Title}
<<<fig=true>>=
print( plot.to.print )
@
\end{center}
\end{document}
在tmp.co.r中,我输入以下代码:
Sweave("tmp.Rnw",stylepath=T)
我创建了这样的tex文件:
/../../2.12.1/bin/R --no-save < tmp.co.r
然后在出来的tmp.tex文件上使用pdflatex。
结果是tmp.pdf,其中包含标题,部分名称和R代码,但没有数字。但是,还会生成Rplots.pdf文件,其中包含我想要的tmp.pdf中的图形。
我确定我犯了一个新手的错误,但我找不到它。有什么提示吗?
答案 0 :(得分:2)
试试这个
<< label = figPlot1, include = FALSE >>=
plot.to.print = qplot( 1:10, 1:10 )
print(plot.to.print)
@
\begin{figure}
\begin{center}
<< label = fig1, fig = TRUE, echo = FALSE >>=
<<figPlot1>>
@
\end{center}
\caption{Your Caption}
\label{fig:figPlot1}
\end{figure}
答案 1 :(得分:1)
查看R-Forge上提供的AFLP包中的ggsave.latex()函数
install.packages("AFLP", repos="http://R-Forge.R-project.org")
然后您的Sweave文件简化为此
\documentclass[10pt]{article}
\title{Reproducible Example}
\begin{document}
\maketitle
<<echo=FALSE,results=hide>>=
library(ggplot2)
#just imports the function you need without loading the entire package
ggsave.latex <- AFLP:::ggsave.latex
plot.to.print = qplot( 1:10, 1:10 )
@
\section{No Figure Below This Section Title}
<<result = tex>>=
ggsave.latex(plot.to.print, caption = "Your caption", label = "ThisIsTheLabel")
@
\end{document}
请注意,ggsave.latex将为您设置数字环境。这允许在一个块中创建多个图形和/或其他LaTeX输出。
答案 2 :(得分:1)
问题是你的无花果块中额外的<
。
这会使其看起来像<fig=TRUE
,因此fig
实际上并未正确设置为TRUE。您会注意到您的.tex
文件中没有正确的includegraphics
行。
为什么你得到Rplots.pdf
有点复杂,但值得了解。首先,每个创建图形的块都会为每个所需的图形类型执行额外的时间。所以,如果你只是制作pdf(我认为是当前的默认值),它会运行两次;如果你制作pdf和eps,它会运行三次。它第一次运行时,无需打开图形设备即可运行;我实际上不确定它为什么会运行,但确实如此。对于多个文件,需要单独运行它,每个文件依次打开。
因此,最好的做法是做你做的事情并运行在一个块中创建图形的所有代码,然后用fig=TRUE
绘制块中的图形;这最小化了多次运行的代码。但是,请注意您是否使用随机数或以fig=TRUE
块的形式递增内容;因为它会多次运行,所以行为可能不是你所期望的。
其次,当在未指定图形设备的情况下运行创建图形的代码时,无论如何都会打开默认图形类型以使代码能够处理。当您以交互方式运行时,会弹出窗口,其中包含图片。以非交互方式运行时,默认设置通常是打开pdf文件,默认名称为Rplots.pdf
。由于这会在创建数字的所有块中发生,因此该文件最终是包含您在其中创建的所有数字的多页pdf。
最后,使用R代码而不是fig=TRUE
机制创建图形的方法有时可能是首选的,因此代码只运行一次;它通常会多一点簿记,但可以通过创建帮助来最小化。显然AFLP包(参见Thierry的回答)有这样的功能,虽然我从未使用它。如果你更愿意写自己的东西,那就像Sweave FAQ A.9中建议的那样,一次创建多个图表,这一点并不太难。
最后(对阵水晶球......),我看到你在Rnw模式下使用Emacs,输入<
给你<<>>=
,光标位于中间,所以输入{{ 1}}给你<<
。