如何生成杰奇从液体块的文件吗?(How to generate files from Liquid

2019-09-21 16:55发布

我写一个插件 ,它定义了新的哲基尔块ditaa 。 在块中的任何内容应从被转换Ditaa标记的图像文件和图像插入到柱代替块。 生成文件的工作,但复制到或产生时_site目录下,文件显然删除。

有没有办法实现产生自定义资源块插件适当/更好的办法?

Answer 1:

我已经找到了正确的解决方案: 使用Jekyll::StaticFile

当你这个类添加一个对象到site.static_files数组,你标志着该文件作为完成渲染过程复制未决。 事实上,这些文件的副本中完成site.write过程。 看看在site_process.rb在杰基尔安装文件。

这个类的用法很简单。 当您需要标记为未来的副本里的文件,你只需执行这样的代码:

site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)

pathfilename取决于你的文件的位置src文件夹。

我也有类似的问题制定一个LaTeX - > PNG液体标签。 您可以在我的代码在GitHub上看一看: https://github.com/fgalindo/jekyll-liquid-latex-plugin



Answer 2:

我还没有找到工作正确的方式做到这一点,但一个。 该解决方案可以发现GitHub上 ,并使用Jekylls复制任何不以下划线为前缀的能力_site目录。 但是,这种方法也有两个缺点:

  1. “源”目录获取与自动生成的文件污染
  2. 因为此前已经杰基尔复制所有文件的图像生成部署无自动再生是一个有点尴尬。 所以第二杰基尔运行是必要的。


Answer 3:

我已经找到了答案。

替换此

site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)

gnufile = GNUplotFile.new(site, site.source, "_site/media/", "#{@file}")
gnufile.givemethecommands commands
site.static_files << gnufile 

并创建一个GNUplotFile继承杰基尔类:: StaticFile

class GNUplotFile < Jekyll::StaticFile
  def write(dest)
    puts "WRITE---->>>>>>>>>>>"
    #File.write('_site/media/BTTTTT.svg', DateTime.now)
    gnuplot(@commands)
    # do nothing
  end
  def gnuplot(commands)
    IO.popen("gnuplot", "w") { |io| io.puts commands }
  end
  def givemethecommands(commands)
    @commands = commands
  end
end 

写命令的清理过程之后运行。 我只是有一个液体块和上面的代码。



文章来源: How to generate files from Liquid blocks in Jekyll?