参考大块内的其他数字

时间:2014-05-27 22:11:11

标签: r latex knitr bibtex

在knitr / LaTeX文档中的一个块中生成的绘图内部,我想要在文档中定位一个文本字符串,其中包含对特定图形的引用,类似于“参见图10”,基于标签那个特殊的数字,让我们说“fig:sim1”。所以我编写了以下R函数,它读取我正在编写的LaTeX文档的.aux文件,并提取与特定标签匹配的图形的计数器

ref <- function(label) {
  lines <- scan("mismatch-final.aux","character",sep="\n")
  line <- grep(paste("\\{",label,"\\}",sep=""),lines,value=TRUE)
  strsplit(strsplit(line,"\\{\\{")[[1]][2],"\\}\\{")[[1]][1]
}

然后我可以从块中生成所需的文本字符串,并将其放在图中,如

text(5,10,paste("See Fig.~",ref("fig:sim1")))

这应该有用,但也许有更简洁的方法吗?另外,有没有办法从块中获取.aux文件名,以便上面的ref函数更通用?

1 个答案:

答案 0 :(得分:1)

另一种方法是使用 tikzDevice 包和TikZ图,这样你就可以在你的图中编写原始的LaTeX表达式,例如

\begin{figure}
....
\caption{Simulation of something. \label{fig:sim1}}
\end{figure}

<<test, dev='tikz', external=FALSE>>=
plot(rnorm(10), rnorm(10))
text(0, 0, 'See Fig \\ref{fig:sim1}')
@

根据绘图的复杂程度,此块可能需要几秒钟才能编译。该图保存为LaTeX文件,任何LaTeX命令都可以在其中工作。