我的数字看起来像这样:
<<foo, fig.lp='', fig.cap='name', fig.subcap=c('left', 'right'),>>=
plot1
plot2
@
现在我想在下面显示关于此图的一组注释(即多行文本)。在knitr创建的图形环境中有没有方便的方法呢?
正如上面的评论中已经指出的,目前我的问题没有解决方案。我已提交功能请求。
答案 0 :(得分:3)
我知道这是一个非常晚的答案,但这就是我最终为同一类型的问题所做的事情。
我定义了一个自定义钩子,可以根据需要绘制图像
# Custom knitr hook to add notes to the plot
knit_hooks$set(plot = function(x, options) {
paste("\n\\end{kframe}\n\\begin{figure}\n",
"\\includegraphics[width=\\maxwidth]{",
opts_knit$get("base.url"), paste(x, collapse = "."),
"}\n",
"\\textsc{Note} -- here is some car stuff with notes",
"\\caption{", options$fig.cap, "}\n",
"\n\\end{figure}\n\\begin{kframe}\n",
sep = '')
})
这是完整的.Rnw
\documentclass{article}
\usepackage[font=large,labelfont=sc]{caption}
\begin{document}
<<setup, echo=FALSE, message=FALSE, results='hide'>>=
suppressPackageStartupMessages({
library(ggplot2)
})
opts_chunk$set(echo=FALSE)
opts_chunk$set(results="hide")
@
<<foo, fig.cap='with notes', fig.height=4, fig.width=6>>=
# save a regular plotting function
regular_plot <- knit_hooks$get("plot")
# Custom knitr hook to add notes to the plot
knit_hooks$set(plot = function(x, options) {
paste("\n\\end{kframe}\n\\begin{figure}\n",
"\\includegraphics[width=\\maxwidth]{",
opts_knit$get("base.url"), paste(x, collapse = "."),
"}\n",
"\\textsc{Note} -- here is some car stuff with notes",
"\\caption{", options$fig.cap, "}\n",
"\n\\end{figure}\n\\begin{kframe}\n",
sep = '')
})
ggplot(data = mtcars) + geom_point(aes(disp,mpg))
@
<<bar, fig.cap='without notes', fig.height=4, fig.width=6>>=
# restore regular plotting function
knit_hooks$set(plot = regular_plot)
ggplot(data = mtcars) + geom_point(aes(disp,mpg))
@
\end{document}
以下是生成的PDF:
答案 1 :(得分:2)
答案非常好!
我对Rmd进行了小小的修改,以首先获取标题并针对文档中的每个块进行概括。
我们必须在开头添加以下行:
knit_hooks$set(plot = function(x, options, .notes = notes, .sources = sources) {
paste("\n\n\\begin{figure}\n",
"\\includegraphics[width=\\maxwidth]{",
opts_knit$get("base.url"), paste(x, collapse = "."),
"}\n",
"\\caption{",options$fig.cap,"}","\\label{fig:",opts_current$get("label"),"}","\\textsc{}",
"\n\\textsc{Notas} -- ",.notes,
"\n\\textsc{Fuentes} -- ", .sources,
"\n\\end{figure}\n",
sep = '')
})
然后在每个块中,我们只写出情节的注释和来源
notes = "Notes to explain the plot"
sources = "Explain the sources"
再次,非常感谢!
Pd:我使用"\\textsc{}"
在标题,注释和来源之间生成一个空格。
最好将其概括为在同一图中使用带有多个图形的子标题。
答案 2 :(得分:0)
来自@akhmed的解决方案对我非常有帮助。我需要进行一些额外的自定义,我将其作为答案传递(对于评论来说太长了)。
\\begin{minipage}
设置为6英寸宽)。其次,我通过设置字体大小并左对齐文本(\\small
和\\begin{flushleft}
下方)添加了几个次要的格式添加。
最后,对于一些数字,我想使用fig.pos =&#34; h!&#34;或者数字位置=&#34;这里&#34; Knitr / Latex的选项,我花了一分钟才意识到这个钩子会覆盖那个chunk选项,所以我手动将它添加为\\begin{figure}[h!]
。
再次感谢@akhmed提供此解决方案。
knit_hooks$set(plot = function(x, options) {
paste("\n\\end{kframe}\n\\begin{figure}[h!]\n",
"\\includegraphics[width=\\maxwidth]{",
opts_knit$get("base.url"), paste(x, collapse = "."),
"}\n",
"\\begin{minipage}{6in}\\small\\begin{flushleft}Note: Lorem ipsum \\end{flushleft}\\end{minipage}",
"\\caption{", options$fig.cap, " \\label{", options$fig.lp, opts_current$get("label"), "}}\n",
"\n\\end{figure}\n\\begin{kframe}\n",
sep = '')
})