我想在texmaker中使用knitr将标题放在图上方。 I know that this question has already been asked,我了解到目前为止建议的解决方案是使用:
\begin{figure}
\caption{This is a caption above the figure}
<<a-plot, echo=FALSE>>=
plot(1)
@
\end{figure}
但是这样我就无法显示代码(因为echo=FALSE
)。
如果我选择echo=TRUE
,我得到的是标题,然后是代码,然后是图表,这也不是我想要的。
我想要展示的是R
的代码,(和)使用R
代码绘制的图表,上面的标题 曲线图。
答案 0 :(得分:3)
我倾向于使用LaTeX软件包来实现这样的定制:Tex StackExchange上有一个大型社区,他们已经开发了加载类似问题的方法。
Floatrow
包可用于重新定位图上方的标题。这主要基于this previous answer。
使用R Markdown,因为这是目前最常用的工作流程,可以通过在YAML中包含header-includes
参数来加载包,如下所示:
---
output: pdf_document
header-includes:
- \usepackage{floatrow}
- \floatsetup[figure]{capposition=top}
---
```{r fig.cap="cap, cap, and cap"}
plot(1)
```
输出具有所需的顺序,首先显示代码,然后是标题,然后是图表。
如果不需要代码,可以将echo=FALSE
选项添加到块头中。
答案 1 :(得分:2)
尝试使用hook:
<<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}
答案 2 :(得分:1)
这是kohske答案的略微修改版本,其中包括\begin{figure}
并添加了\label
。但请注意,它包含5行,而original代码包含超过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)