我正在编写一个定义新 Jekyll 块的插件ditaa
。块中的任何内容都应从Ditaa 标记转换为图像文件,并将该图像插入帖子而不是块中。生成文件有效,但是当复制到目录或在_site
目录中生成时,文件显然被删除了。
是否有适当/更好的方法来实现生成自定义资产的块插件?
我找到了正确的解决方案:使用Jekyll::StaticFile
class。
当您将此类的一个对象添加到数组中时,您将在渲染过程完成后site.static_files
将此文件标记为待复制。实际上,此类文件的复制是在此过程中完成的。查看 Jekyll 安装中的文件。site.write
site_process.rb
这个类的使用很简单。当您需要标记文件以供将来复制时,您只需执行如下代码:
site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)
path
位置和filename
位置取决于文件夹中文件的位置src
。
我在开发 LaTeX -> PNG 液体标签时遇到了类似的问题。您可以在 GitHub 上查看我的代码:https ://github.com/fgalindo/jekyll-liquid-latex-plugin
我还没有找到正确的方法来做到这一点,但是一种有效的方法。该解决方案可以在GitHub上找到,并使用 Jekylls 功能将任何不带下划线前缀的内容复制到_site
目录中。但是,这种方法也有两个缺点:
我找到了答案。
替换这个
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
继承 Jekyll::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
写命令在清理过程之后运行。我只有一个 Liquid 块和上面的代码。