.bib 文件中的 knitr 块
knitr chunks within .bib file
我正在使用 LaTeX 包 problems 从问题数据库创建解决方案集。该数据库的结构类似于书目数据库,位于 .bib 文件中。整个系统对于常规 LaTeX 工作得很好,但现在我的一些解决方案中有 R 代码(在 knitr 块中)。
RStudio 中 knitting/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}
您必须先 编织 .bib
文件 然后 运行 LaTeX 和 BibTeX。
虽然你通常有一个 .Rnw
文件编织到 .tex
然后让 LaTeX 工具处理 .tex
和 .bib
文件你将不得不开始使用(让我们称之为).Rbib
编织成 .bib
然后由 LaTeX 处理的文件。
为简单起见,我将名为 .Rbib
的文件命名为 bibliography.Rnw
,但您可以选择任何您喜欢的扩展名。我选择 .Rnw
是因为里面使用的语法与 .Rnw
文件中的语法相同。
作为 bib 文件的虚拟条目,我使用来自 verbosus.com 的数据并添加了一些 knitr
代码。
第一个块设置全局块选项以防止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}
}
拥有块选项 results = "asis"
并使用 cat()
而不是 print()
很重要。否则,输出中会有不需要的字符。
如果将其另存为 bibliography.Rnw
,则以下内容足以获得包含已评估块的 .bib
文件:
knit(input = "bibliography.Rnw", output = "bibliography.bib")
之后只剩下标准的 LaTeX 编译。
我正在使用 LaTeX 包 problems 从问题数据库创建解决方案集。该数据库的结构类似于书目数据库,位于 .bib 文件中。整个系统对于常规 LaTeX 工作得很好,但现在我的一些解决方案中有 R 代码(在 knitr 块中)。
RStudio 中 knitting/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}
您必须先 编织 .bib
文件 然后 运行 LaTeX 和 BibTeX。
虽然你通常有一个 .Rnw
文件编织到 .tex
然后让 LaTeX 工具处理 .tex
和 .bib
文件你将不得不开始使用(让我们称之为).Rbib
编织成 .bib
然后由 LaTeX 处理的文件。
为简单起见,我将名为 .Rbib
的文件命名为 bibliography.Rnw
,但您可以选择任何您喜欢的扩展名。我选择 .Rnw
是因为里面使用的语法与 .Rnw
文件中的语法相同。
作为 bib 文件的虚拟条目,我使用来自 verbosus.com 的数据并添加了一些 knitr
代码。
第一个块设置全局块选项以防止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}
}
拥有块选项 results = "asis"
并使用 cat()
而不是 print()
很重要。否则,输出中会有不需要的字符。
如果将其另存为 bibliography.Rnw
,则以下内容足以获得包含已评估块的 .bib
文件:
knit(input = "bibliography.Rnw", output = "bibliography.bib")
之后只剩下标准的 LaTeX 编译。