如何正确渲染Rmd文件中Markdown代码块的输出结果
解决Rmd条件渲染markdown/LaTeX内容的问题
你的核心问题是当前代码块被识别为R代码块,输出内容会被当作代码显示,而非markdown/LaTeX解析。要实现仅当testarpress==TRUE时渲染包含文本、公式和R变量的内容,且避免繁琐的字符串拼接,可按以下方式操作:
方法1:使用results='asis'的R代码块
修改原代码块,添加results='asis'参数,让R代码输出的内容直接被当作markdown/LaTeX渲染;同时利用R的here文档简化文本编写:
--- output: html_document: default pdf_document: default editor_options: chunk_output_type: console --- Uma vez que a `r vd` é medida numa escala `r ifelse(class_vd[1]=="ordered", "ordinal, o teste a usar é o Wilcoxon-Mann-Whitney", "quantitativa, o teste a usar é o t-Student se:")` `r testarpress <- class_vd[1]=="numeric"` ```{r, echo=FALSE, eval=testarpress, results='asis'} # 用here文档编写markdown内容,直接插入R变量 cat(trimws(' - $', vd, '_i \\sim N(\\mu_i, \\sigma_i);i=', grupo[1], ',', grupo[2], '$ --- ', ifelse(sum(SW$norm) > 1, "Verifica-se.", "Rejeita-se."), ' - $\\sigma^2_{', grupo[1], '}=\\sigma^2_{', grupo[2], '}$ --- ', ifelse(Lev$homosc[1], "Verifica-se.", "Rejeita-se."), ' '), sep = "")
### 关键参数说明 - `results='asis'`:告知knitr将代码块输出内容当作原生markdown/LaTeX解析,而非代码结果。 - `echo=FALSE`:隐藏代码块本身(若需展示代码可改为`echo=testarpress`)。 - `eval=testarpress`:仅当条件为`TRUE`时执行该代码块。 - `trimws()`:去除here文档首尾空白字符,避免生成多余空行。 ## 方法2:使用外部markdown片段 若内容量较大,可将需要渲染的内容单独存为`.md`文件(比如`t-test-conditions.md`),再在主Rmd中条件性引入: ```r # 主Rmd中的代码块 ```{r, echo=FALSE, eval=testarpress, results='asis'} knitr::include_text("t-test-conditions.md")
`t-test-conditions.md`中的内容: ```markdown - $`r vd`_i \sim N(\mu_i, \sigma_i);i=`r grupo[1]`,`r grupo[2]`$ --- `r ifelse(sum(SW$norm) > 1, "Verifica-se.", "Rejeita-se.")` - $\sigma^2_{`r grupo[1]`}=\sigma^2_{`r grupo[2]`}$ --- `r ifelse(Lev$homosc[1], "Verifica-se.", "Rejeita-se.")`
这种方式能让主文档更简洁,适合复杂内容的场景。
内容的提问来源于stack exchange,提问作者JPMD
相关产品推荐
相关产品推荐

