LaTeX knitr 文档中动态文本的条件输出

Conditional output of dynamic text in a LaTeX knitr document

我想在 knitr LaTeX 文档 (.Rnw) 中打印几句话,但前提是存在一些数据。这些句子大部分是文本,但有一些 R。

示例:

A chi-squared test of your observed sizes has a p-value of
\Sexpr{format(calculated_chisq$p.value,digits=3,scientific=F)}.
A p-value below 0.05 means you should be concerned that your
groups are broken.  The lower the p-value, the more worried you
should be.

我用 results='asis' 尝试了一个块,但我认为该块被解释为 R.

我用 R 尝试了 print()paste()。它很丑,但它有效。但是,它在其中添加了额外的文本,似乎与 R 提示相对应。

有什么好的方法吗?

This is related, but different. This 相同,但没有答案。

这个问题与 密切相关,但我认为不重复:那里接受的答案转化为一个丑陋的 \Sexp 怪物,里面有一个条件。代码既不好读也不好写。

也不适用,因为 1) asis 引擎不允许在文本中使用动态元素,以及 2) 因为 asis 的输出得到灰色背景RNW 文档中的颜色。

我建议采用以下解决方案:

\documentclass{article}
\begin{document}

<<>>=
  x <- rnorm(1)
@

The value of $x$ is \Sexpr{x}.

<<echo=FALSE, results = "asis">>=
  pattern <- "This will only be displayed if $x$ is positive. The value of $x$ is %.2f."
  if (x > 0) cat(sprintf(pattern, x))
@

\end{document}

条件输出易于读写(pattern),动态元素通过sprintf插入。