Я создаю отчет о латексе, который производит несколько графиков в вызове 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 помещает закрывающий \ титры скобки вне \ этикеточной скобы, которую можно увидеть в фрагменте коды из файла .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's Latex/Floats... странице:
Если вы хотите, чтобы маркировать фигуру, так что вы можете ссылаться на него позже, вы должны добавить метку после заголовка (внутри, кажется, работает в LaTeX 2e), но внутри плавающей среды. Если он объявлен снаружи, он даст номер раздела.
«Ядро, похоже, работает в LaTeX 2e», привлекло мое внимание. Кажется, это работает только потому, что ошибка игнорируется несколько раз? Я использую LaTeX2e < 2005/12/01>. Я думаю, что часть кода в hook_plot_tex функции линии 120 крючков-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 ... Спасибо!
Я думаю, что это будет чище использовать дочерние документы вместо того, чтобы динамически создавать куски кода с помощью 'пасты()'. См. Пример 20: https://github.com/yihui/knitr-examples –
не может решить, как адаптировать это для файлов .Rmd: https://stackoverflow.com/questions/27443019/knitr-plots-labels- и-подпись, в-один-кусок RMD-файлы –