Я создаю отчет о латексе, который выдает несколько графиков в вызове dlply. Разумеется, вызов dlply в одном блоке и для того, чтобы получить метки и подписи для изменения, я использую фрагмент из Steve Powell ниже. Подход работает, но кажется, что knitr не корректно форматирует вывод. Простой пример, демонстрирующий:
\documentclass{article}
\begin{document}
<startup,echo=FALSE,results='hide',message=FALSE,tidy=FALSE,warning=FALSE,fig.keep='all',comment=NA>>=
require(knitr)
require(ggplot2)
opts_knit$set(progress = F, verbose = F)
opts_chunk$set(comment=NA,
tidy=FALSE,
warning=FALSE,
message=FALSE,
echo=FALSE,
dpi=600,
fig.width=6.75, fig.height=4, # Default figure widths
dev=c("pdf",'tiff'),
dev.args=list(pdf=list(NULL),tiff=list(compression='lzw')),
error=FALSE)
@
<<plotloop,results='asis'>>=
for(x in seq(1,20)){
x1<-data.frame(x=seq(1,10),y=seq(1,10))
plt<-ggplot(data=x1,aes(x,y))+geom_point()
figLabel=paste('Figure',x,sep='')
capt<-paste('Caption for fig.',x)
cat(knit(text=(paste("<<",figLabel,",fig.pos='ht',fig.cap='",capt,"'>>=\nplt\[email protected]",sep=''))))
}
@
\end{document}
Это почти работает. Беда в том, что knitr помещает закрытие \caption за пределы скобки \label, которое можно увидеть в фрагменте файла .tex ниже:
\begin{knitrout}
\definecolor{shadecolor}{rgb}{0.969, 0.969, 0.969}
\color{fgcolor}
\begin{figure}[ht]
\includegraphics[width=\maxwidth]{figure/Figure1} \caption[Caption for fig]{Caption for fig. 1\label{fig:Figure1}}
\end{figure}
\end{knitrout}
латекс может справиться с этим, если есть только несколько цифр, подобных этому, но с большим количеством графиков, он начинает их неправильно размещать. Я также пробовал это с помощью
fig.cap=paste('testLoop',seq(1,20))
и получите тот же результат.
Дальнейшие разъяснения: я нашел это на wikipedia Latex/Floats... страница:
Если вы хотите пометить фигуру, чтобы позже ее можно было ссылаться, вы должны добавить метку после заголовка (внутри, похоже, работает в LaTeX 2e), но внутри плавающей среды. Если он объявлен снаружи, он укажет номер раздела.
Мне кажется, что "внутри, похоже, работает в LaTeX 2e". Кажется, это работает только потому, что ошибка игнорируется несколько раз? я использую LaTeX2e < 2005/12/01 > . Я думаю, что бит кода находится в функциональной строке hook_plot_tex 120 hooks-latex.R:
fig2 = sprintf('\\caption%s{%s\\label{%s}}\n\\end{%s}\n', scap, cap,
paste(lab, if (mcap) fig.cur, sep = ''), options$fig.env)
Это исправить?
fig2 = sprintf('\\caption%s{%s}\\label{%s}\n\\end{%s}\n', scap, cap,
paste(lab, if (mcap) fig.cur, sep = ''), options$fig.env)
Предложения? Я не знаком с процессом github... Спасибо!