.bib文件中的knitr块

时间:2015-10-21 20:36:07

标签: r latex rstudio knitr

我正在使用LaTeX包problems从问题数据库创建解决方案集。数据库的结构类似于参考书目数据库,位于.bib文件中。整个系统对常规LaTeX工作得很漂亮,但现在我的一些解决方案中有R代码(用knitr块)。

RStudio中的编码/ TeXing / BibTeXing的默认序列不起作用 - 代码在文档中逐字结束,以及块分隔符的错位版本。因此,我需要找到正确的步骤工作流程,以确保代码能够完成。

这个软件包似乎已经设置了两个文件,一个用于数据库,一个用于.tex / .rnw,所以我不能做一个有效的例子,但是这样的话:

\documentclass{article}
\usepackage[solution]{problems}
\Database{

@QUESTION{1.1,
    problem = {1.1},
    solution = {This solution only uses TeX, like $\bar{x}$. It works fine.}}

@QUESTION{1.2,
    problem = {1.2},
    solution = {This solution includes code
        <<>>=
            head(iris)
        @
        It does not work.
    }}}

\begin{document}
Problems for this week were 1.1 and 1.2
\problems{1.1}
\problem{1.2}
\end{document}

1 个答案:

答案 0 :(得分:3)

您必须首先编织.bib文件,然后运行LaTeX和BibTeX。

虽然您通常有.Rnw文件编织到.tex,然后让LaTeX工具处理.tex.bib文件,您必须从(让我们称之为).Rbib文件,编织到.bib然后由LaTeX处理。

为简单起见,我将名为.Rbib的文件命名为bibliography.Rnw,但您可以选择任何您喜欢的扩展程序。我选择了.Rnw,因为内部使用的语法与.Rnw文件中的语法相同。

作为bib文件的虚拟条目,我使用verbosus.com中的数据并添加了一些knitr代码。

第一个chunk设置全局块选项,以防止knitr将块的代码或任何标记添加到输出文件中。下一个块显示了例如title字段如何填充生成的内容,\Sexpr{}部分是如何使用它来添加一些动态文本的示例。

<<setup>>=
library(knitr)
opts_knit$set(
  echo = FALSE,
  results = "asis"
)
@

article{article,
  author  = {Peter Adams},
  title   = {
<<echo=FALSE, results = "asis">>=
  cat("The title of the work")
@
},
  journal = {"The title of the journal"},
  year    = 1993,
  number  = 2,
  pages   = {201-213},
  month   = 7,
  note    = {An optional note},
  volume  = 4
}

@book{book,
  author    = {Peter Babington},
  title     = {\Sexpr{"The title of the work"},
  publisher = {The name of the publisher},
  year      = 1993,
  volume    = 4,
  series    = 10,
  address   = {The address},
  edition   = 3,
  month     = 7,
  note      = {An optional note},
  isbn      = {3257227892}
}

使用chunk选项results = "asis"并使用cat()代替print()非常重要。否则,输出中会出现不需要的字符。

如果保存为bibliography.Rnw,则以下内容足以获得评估了块的.bib文件:

knit(input = "bibliography.Rnw", output = "bibliography.bib")

之后只剩下标准的LaTeX编译。