9

我想在 texmaker 中使用 knitr 将标题放在图上方。 我知道这个问题已经被问过,并且我知道到目前为止建议的解决方案是使用:

\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

3 回答 3

12

我倾向于使用 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可以将选项添加到块头中。

于 2018-04-04T19:31:00.530 回答
3

尝试使用钩子:

<<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} 

在此处输入图像描述

于 2014-07-15T04:44:40.747 回答
1

这是 kohske 答案的略微修改版本,其中包括 \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)
于 2016-03-06T20:16:33.687 回答