【问题标题】:Referring to other figures from within a chunk从一个块中引用其他图形
【发布时间】:2014-05-27 22:11:10
【问题描述】:

在 knitr/LaTeX 文档的块中生成的绘图内,我想定位一个文本字符串,并参考文档中的特定图形 elsehwere,例如“参见图 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 函数更通用?

【问题讨论】:

    标签: r latex knitr bibtex


    【解决方案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 命令都可以在其中工作。

    【讨论】:

    • 期刊需要pdf、eps或tiff格式的所有图表。我相信如果我设置 external=TRUE 会生成该图的 pdf 版本,如果我没记错的话,它会包含在生成的乳胶文件中的 \includegraphics{ } 中?但是使用 external=TRUE 时,该图形是独立于文档的其余部分编译的,因此标签将不可用,不是吗?所以我想我会选择基于从块中读取带有 R 代码的 aux 文件的解决方案。
    • @user2768086 这是有道理的。就个人而言,除非我在论文中有大量数字,否则我只会在图中对数字进行硬编码。实际上,我会将参考放在图形标题中,而不是 R 图中。为了一点点的收获而付出太多的努力是不值得的……
    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 2015-09-08
    • 2019-05-14
    相关资源
    最近更新 更多