R 从块中引用其他数字

R 从块中引用其他数字,r,latex,knitr,bibtex,R,Latex,Knitr,Bibtex,在knitr/LaTeX文档的一个区块中生成的绘图中,我想定位一个文本字符串,该字符串引用文档中的一个特定图形,类似于“见图10”,基于该特定图形的标签,让我们说“Fig:sim1”。因此,我编写了下面的R函数,它读取我正在编写的LaTeX文档的.aux文件,并提取与特定标签匹配的数字计数器 ref <- function(label) { lines <- scan("mismatch-final.aux","character",sep="\n") line <-

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

这应该行得通,但也许有一种更干净的方法可以做到这一点?另外,是否有一种方法可以从区块中获取.aux文件名,从而使上面的ref函数更通用?

另一种方法是使用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}')
@
\begin{figure}
....
\标题{某物的模拟。\label{fig:sim1}
\结束{图}
=
绘图(rnorm(10),rnorm(10))
文本(0,0,'参见图\\ref{Fig:sim1}')
@

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

日志需要pdf、eps或tiff格式的所有图形。我相信,如果我设置external=TRUE,就会生成该图的pdf版本,如果我没有弄错的话,它会包含在生成的latex文件中的\includegraphics{}中?但是当external=TRUE时,图形是独立于文档的其余部分进行编译的,这样标签就不可用了,不是吗?因此,我想我会选择基于从区块中读取带有R代码的aux文件的解决方案。@user2768086这很有意义。就我个人而言,我只是硬编码图中的数字,除非我有大量的数字在纸上。实际上,我把参考放在了图形标题中,而不是R图中。做太多的工作而只得到一点点是不值得的。。。
\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}')
@