【问题标题】:How to render table and math in Rmarkdown when called from Shiny App从 Shiny App 调用时如何在 Rmarkdown 中渲染表格和数学
【发布时间】:2017-08-26 18:31:29
【问题描述】:

我有一个如下所示的 Rmarkdown 文件 (info.rmd):

---
title: "Information"
theme: yeti
date: "4/1/2017"
output: html_document
---


## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.


```{r echo = FALSE, results = 'asis'}
library(knitr)
kable(mtcars[1:5, ], caption = "A knitr kable.")
```

## Formulation

Here is where we formulate
$$\sum_{i=1}^n X_i$$

还有像这样调用 Rmarkdown 的 ShinyApp:

server.R

包含这个

  output$markdown <- renderUI({
    HTML(markdown::markdownToHTML(knit('info.rmd', quiet = TRUE), fragment.only=TRUE))
  })

ui.R

包含:

 fluidPage(uiOutput('markdown'))

但是生成的表格和数学怎么会是这样的呢?

正确的做法是什么?


当在 Shiny 外部独立运行时,info.rmd 会正确生成表格:


我在ui.R尝试过这个

 includeHTML("info.html")

正确显示文件 html,但阻止绘图 和其他tabPanel() 的反应性工作。


更新

这是@Nice 解决方案后的新结果:

【问题讨论】:

  • 也许不同的CSS?浏览生成的 HTML 代码...

标签: javascript html r shiny markdown


【解决方案1】:

使用以下内容编辑闪亮的服务器部分应该会有所帮助:

output$markdown <- renderUI({
    markdown::markdownToHTML(knit('info.rmd', quiet = TRUE), fragment.only=TRUE)
    withMathJax(includeHTML("info.html"))
  })

或者,您还可以执行以下操作:

output$markdown <- renderUI({
    markdown::markdownToHTML(knit('info.rmd', quiet = TRUE), fragment.only=TRUE)
    withMathJax(includeMarkdown("info.md"))
  })

【讨论】:

  • 桌子问题呢?它似乎没有解决它。
【解决方案2】:

如果您使用fragment.only,则不包含CSS和JS,并且表格/方程式没有样式。

一种简单的方法是在 iframe 中包含带有标题的完整 HTML,这样它就不会干扰应用程序的其余部分。

output$markdown <- renderUI({
    tags$iframe(src='info.html',width="100%",frameBorder="0",height="1000px")
  })

info.html 文件需要位于您应用的 www 文件夹中。您可以通过更改tags$iframe中的参数来调整iframe的宽度和高度。

您可以使用 CSS 更改 iframe 中主容器的宽度。如果您将此添加到您的 info.rmd 文件中:

```{r results="asis",echo = FALSE}
cat("
<style>
.main-container.container-fluid {
   max-width: 100%;
   padding-left:0px;
}
</style>
")
```

【讨论】:

  • 谢谢。但是插入的html被缩小了。我怎样才能跨越整个导航栏长度。查看我的更新。
  • 我编辑,rmd 文件中的主容器有一个最大宽度,因此它不会跨越整个页面,您可以使用 css 更改它。您需要再次编织并将新的 info.html 放入 www 文件夹中。
  • 谢谢我试过了。它有所改善。但还是有一定程度的缩进。我们希望文本“描述”与导航栏 Exp1 对齐。
  • 您也可以从 iframe 中的 .container-fluid 中删除 padding-left,但之后会将文本放在容器的左侧。如果仍有空间,可能是由于您的应用中其他 div 的填充。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2021-10-27
相关资源
最近更新 更多