当从Shiny App调用时,如何在Rmarkdown中呈现表和数学

nev*_*int 5 html javascript markdown r shiny

我有一个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$$
Run Code Online (Sandbox Code Playgroud)

ShinyApp就像这样调用Rmarkdown:

server.R

包含这个

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

ui.R

包含这个:

 fluidPage(uiOutput('markdown'))
Run Code Online (Sandbox Code Playgroud)

但是为什么生成的表和数学看起来像这样呢?

在此输入图像描述

什么是正确的方法呢?


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

在此输入图像描述


我试过这个 ui.R

 includeHTML("info.html")
Run Code Online (Sandbox Code Playgroud)

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


更新

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

在此输入图像描述

Nic*_*icE 5

如果使用fragment.only,则不包括CSS和JS,并且未对表/方程进行样式设置.

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

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

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

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

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


SBi*_*sta 1

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

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

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

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