Подпись над рисунком с использованием knitr (LaTeX/PDF)
Я хотел бы разместить подпись над рисунком, используя knitr в texmaker. Я знаю, что этот вопрос уже задавался, и я понимаю, что предлагаемое решение заключается в использовании:
\begin{figure}
\caption{This is a caption above the figure}
<<a-plot, echo=FALSE>>=
plot(1)
@
\end{figure}
Но таким образом я не могу показать код (так как echo=FALSE
). И если я выберу вместо echo=TRUE
, что я получаю, это подпись, затем коды, а затем график, что тоже не то, что я хочу. То, что я хотел бы показать, это код для R
, (и) график, построенный с этим R
код с надписью над графиком.
4 ответа
Попробуйте использовать крючок:
<<include=FALSE>>=
f <- function(x, options) {
paste("\\end{kframe}\n",
"\\caption{", options$capT, "}\n",
hook_plot_tex(x, options),
"\n\\begin{kframe}", sep = "")
}
knit_hooks$set(plot = f)
@
\begin{figure}
<<a-plot, echo=TRUE, capT="cap, cap, and cap">>=
plot(1)
@
\end{figure}
Я предпочитаю использовать пакеты LaTeX для настройки, подобной этой: на Tex StackExchange есть большое сообщество, которое разработало методы для загрузки подобных проблем.
Floatrow
Пакет может быть использован для изменения заголовка над рисунком. Это в значительной степени основано на этом предыдущем ответе.
Используя R Markdown, так как это наиболее часто используемый рабочий процесс в наши дни, пакет можно загрузить, включив header-includes
аргумент в рамках YAML, а именно:
---
output: pdf_document
header-includes:
- \usepackage{floatrow}
- \floatsetup[figure]{capposition=top}
---
```{r fig.cap="cap, cap, and cap"}
plot(1)
```
Вывод имеет желаемый порядок, сначала отображается код, затем подпись и график.
Если код не требуется, echo=FALSE
опция может быть добавлена в заголовок чанка.
Это немного измененная версия ответа Кохске, которая включает в себя \begin{figure}
и добавляет \label
, Обратите внимание, что он содержит 5 строк, в то время как исходный код содержит более 150 строк, поэтому его следует использовать в очень ограниченных настройках.
f <- function(x, options) {
lab <- paste0(options$fig.lp, options$label)
paste("\\end{kframe}\n",
"\\begin{figure}\n\\caption{", options$capT, "}\\label{", lab,"}\n",
hook_plot_tex(x, options),
"\\end{figure}\n\n\\begin{kframe}", sep = "")
}
knit_hooks$set(plot = f)
Добавьте под ним новый блок с тем же именем, чтобы напечатать код.
\documentclass{article}
\begin{document}
\begin{figure}
\caption{This is a caption above the figure}
<<a-plot, echo=FALSE>>=
plot(1)
@
\end{figure}
<<a-plot,echo=TRUE>>=
@
\конец{документ}