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

时间:2017-03-13 21:00:44

标签: r latex knitr rnw

我想在knitr LaTeX doc(.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是相关的,但不同。 This是相同的,但没有答案。

1 个答案:

答案 0 :(得分:1)

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

My own answer也不适用,因为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插入。