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