knitr - подписи к рисункам выше

Есть ли способ в knitr переместить fig.cap над фигурой? Они нужны мне выше, чтобы при выборе гиперссылки списка фигур для определенной таблицы она переходила к фигуре. Прямо сейчас заголовок и, следовательно, цель гиперссылки находятся внизу, поэтому при выборе только заголовок отображается вверху страницы, и нужно прокрутить вверх, чтобы увидеть рисунок... довольно глупо.

Пример моего текущего кода:

<<Race, fig.lp='fig:', fig=TRUE, eval=TRUE, echo=FALSE, dev='png', fig.pos='H', fig.width=8, fig.height=4, fig.cap='Race', fig.align='center', dpi=300>>=
b <- ggplot(melt(race.plot, id=c("Type"), variable.name="Race", value.name="Count"))
b + geom_bar(aes(Race, y=Count, fill=Race), position="dodge", stat="identity", alpha=0.7) + 
  ggtitle("Race") + xlab("") + ylab("Count") +
  facet_wrap(~Type, nrow=2, scale="free_y") +
  theme(plot.title=element_text(size=25), 
    axis.title=element_text(size=15), 
    axis.text.y=element_text(size=10),
    axis.text.x=element_blank(),
    axis.ticks.x=element_blank())
@

Я понимаю, что есть способы сделать это, используя латекс и оставив fig.cap отдельно в блоке knitr:

\begin{figure} 
\caption{This is a caption above the figure} 
<<a-plot, echo=FALSE>>= 
plot(1) 
@ 
\end{figure} 

Большинство предложений состоит в том, чтобы сделать вышеупомянутое, но дата приблизительно 2012 или начало 2013 года. Интересно, позволят ли какие-либо изменения в knitr эту функциональность сейчас

Я использовал параметры в knitr и xtable, чтобы контролировать большинство вещей в моем выводе, но каков консенсус? Должен ли я избежать этого и использовать варианты латекса вне кусков knitr когда бы ни было возможно?

1 ответ

Может быть, слишком поздно, но я думаю, что Yihui ответил на это.

Вы можете изменить вязание крючком для всех фигур, чтобы подпись над рисунком. Например, вот версия чанка из документа.Rmd. Если вы скажете knitr изменить параметр для рисунка, чтобы документ сначала смотрел, а затем на фактический.

```{r setup}
library(knitr)
knit_hooks$set(plot = function(x, options) {
  paste('<figure><figcaption>', options$fig.cap, '</figcaption><img src="',
        opts_knit$get('base.url'), paste(x, collapse = '.'),
        '"></figure>',
        sep = '')
})
```
Другие вопросы по тегам