如何在Jekyll帖子中包含Rmarkdown / HTML文件

时间:2016-08-04 18:04:03

标签: html jekyll r-markdown

我正在使用Jekyll制作并在GitHub上托管的静态网站上工作。其中一篇文章看起来像this

Normal view of the site

另外,我创建了一个Rmarkdown文件,我想将生成的html文件嵌入到帖子中。我读了here,我只需要这样做:

  

您只需在项目的DocumentRoot中创建名称为 _includes / 的文件夹,然后在其中创建一个HTML文件,例如" mycomponent.html"并使用以下内容在您的帖子中调用它:

{% include mycomponent.html %}

我在_includes /文件夹中添加了我的html文件,并在相应帖子的markdown文件末尾添加了这段代码。但是,当我这样做时,网站布局会完全改变

Undesired look of the site

我有办法避免这种情况吗?该网站的所有文件都是商店here

修改

我发现另一个问题建议this

  

在我看来,最好的解决方案是:

     

使用jQuery:

     

a.html:

<html> 
  <head> 
    <script src="jquery.js"></script> 
    <script> 
    $(function(){
      $("#includedContent").load("b.html"); 
    });
    </script> 
  </head>
  <body> 
     <div id="includedContent"></div>
  </body> 
</html>
     

b.html:

<p> This is my include file </p>

我完全不明白。不知何故,网站的布局已恢复,但现在一些图像和htmlwidget丢失了。此外,页面的页脚完全搞砸了。

Another undesired look of the site

2 个答案:

答案 0 :(得分:3)

从回购开始,我假设您已尝试将_includes/Report.html包含在另一个文件中。

_includes/Report.html是一个完整的HTML网页(包含doctypehtml代码),而非include设计的部分内容。 Liquid将使用完整的HTML替换include标记,从而创建无效的标记以及布局问题的可能来源:

<!doctype html>
<html>
  <head>...</head>
  <body>
    ...
    <!doctype html>
    <html>
      ...
    </html>
  </body>
</html>

要解决此问题,请从_includes/Report.html删除额外标记(保留script标记),并使用Liquid包含更正的部分:

{% include Report.html %}

答案 1 :(得分:1)

我发现没有必要在另一个中嵌入一个html。使用R,可以创建带有post的Rmd文件,然后将其转换为所需的md文件。 Jason Fisher的website通过逐步说明很好地解释了它。他的GitHub site也提供了有用的信息。

另一个有用的site是Juuso Parkkinen的作品。他是那个告诉我他从未将html嵌入到另一个中的人,只使用R直接创建他的Jekyll网站,使用以下code

# compiles all .Rmd files in _R directory into .md files in _posts directory,
# if the input file is older than the output file.

# run ./knitpages.R to update all knitr files that need to be updated.

KnitPost <- function(input, outfile, base.url="/") {
  # this function is a modified version of an example here:
  # http://jfisher-usgs.github.com/r/2012/07/03/knitr-jekyll/
  require(knitr);
  opts_knit$set(base.url = base.url)
  fig.path <- paste0("blog/figs/", sub(".Rmd$", "", basename(input)), "/")
  opts_chunk$set(fig.path = fig.path)
  opts_chunk$set(fig.cap = "testing")
  render_jekyll()
  knit(input, outfile, envir = parent.frame())
}

for (infile in list.files("blog/_R", pattern="*.Rmd", full.names=TRUE)) {
  outfile = paste0("blog/_posts/", sub(".Rmd$", ".md", basename(infile)))

  # knit only if the input file is the last one modified
  if (!file.exists(outfile) | file.info(infile)$mtime > file.info(outfile)$mtime) {
    KnitPost(infile, outfile)
  }
}

他的GitHub帐户也是一个有用的参考。