我正在尝试为动态文档编写摘要,但我的\Sexpr{}调用不起作用.
基本上我所要做的就是用一个抽象来启动文档,该抽象具有从\Sexpr{value}文档中"下游"确定值的位置生成的p值.例如
这有效:
\begin{document}
<<foo>>=
value = 10
@
Today I bought \Sexpr{value} Salamanders
\end{document}
Run Code Online (Sandbox Code Playgroud)
这不起作用(以及我想要实现的目标)
\begin{document}
Today I bought \Sexpr{value} Salamanders
<<foo>>=
value = 10
@
Run Code Online (Sandbox Code Playgroud)
我没有看到一个简单的解决方案来推迟对\Sexpr代码块求值后的求值,但它仍然很容易\Sexp与稍后定义的值一起使用,例如,摘要:myabstract.Rnw对摘要使用单独的文件 ( ),\input{myabstract}在其中添加摘要应该包含knit myabstract.Rnw在主文档的最后:
document.Rnw:
\documentclass{article}
\begin{document}
\begin{abstract}
\input{myabstract}
\end{abstract}
Main text.
<<>>=
answer <- 42
@
\end{document}
<<include = FALSE>>=
knit("myabstract.Rnw")
@
Run Code Online (Sandbox Code Playgroud)
myabstract.Rnw:
The answer is \Sexpr{answer}.
Run Code Online (Sandbox Code Playgroud)
理解其工作原理的关键是knitr要先于 LaTeX 处理文档。\input{myabstract}因此,LaTeX 命令包含myabstract.tex“before”(不是指时间而是指行号)并不重要,knit("myabstract.Rnw")生成myabstract.tex.
对于更复杂的场景,可以将评估和输出分开:在早期块中进行所有计算并在其所属位置打印结果。要显示源代码,请重用块(设置eval = FALSE)。使用上面的示例,这意味着:
\documentclass{article}
\begin{document}
<<calculation, include = FALSE>>=
answer <- 42
@
\begin{abstract}
The answer is \Sexpr{answer}.
\end{abstract}
Main text.
<<calculation, eval = FALSE>>=
@
\end{document}
Run Code Online (Sandbox Code Playgroud)