将生成的文件从 Jekyll 插件复制到站点资源文件夹

问题描述 投票:0回答:1

我正在 Jekyll 中开发一个插件,它会插入一个名为

latex
的新 Liquid 标签(块标签)。它的目的是通过这种方式在帖子源文件中插入一块 LaTeX 源代码:

... post file contents ...
{% latex density=300 usepackages=pstricks-all, %}
\pspicture(5,5)
\psframe(0,0)(5,5) \psline(0,0)(5,5) \psline(0,5)(5,0)
\endpspicture
{% endlatex %}
... post file contents ...

编译后,输出帖子将包含

<img>
标签而不是 Liquid Tag 块,并且 LaTeX 源将通过
latex
dvips
convert
的链式执行进行编译。所以它将依赖于外部程序(TexLive 和 ImageMagick)。

到目前为止,我还没有发现所解释的任何问题。我可以将 LaTeX 块放入临时文件中,最后将其编译为 PNG。渲染的文件必须放在帖子的同一文件夹中。

但我被困住了:我想将生成的 PNG 图像放入

destination
输出文件夹内的此文件夹中。定义站点配置变量来定义文件夹(事实上,我就是这样做的),也没有在其中放置文件。问题很简单:我可以写入
source
文件夹,但生成的文件不会复制到
destination
文件夹

我知道原因了:Jekyll 先生成,后渲染。复制过程发生在渲染部分之前,因此生成的文件不会被复制。

我找到了这个SO条目:“

如何从Jekyll中的Liquid块生成文件?”,但答案感觉不对:您必须为要复制的文件进行两遍构建。

还发现“

使用 Jekyll 插件在 _site 中生成文件”,但这不适用,因为我不想通过模板渲染文档。

我一直计划的解决方案是这样的:

    保留一个包含所有生成文件的文件夹以及一些索引策略以用于最终放置。
  • 为最终安置过程实施

    Site

    宽方法,例如:

    class Site def generate_latex_adds // Code that copies the generated files to destination folders end end
    
    
  • self.generate_latex_adds

    site_process.rb
     调用之前在 
    self.cleanup
     脚本中添加 
    self.write
     调用该方法。

这或许可以解决问题,

但我觉得修改不对site_process.rb

。我正在考虑将此 Liquid 标签作为 GitHub 项目拉到社区,因此,我必须向此插件的用户记录 site_process.rb
 的手动编辑。我知道这可能是一种常见情况和常见解决方案,但我想知道是否有更好的方法可以在不修改核心文件的情况下推迟生成文件的副本。我想让插件保持简单:只需将插件文件复制到 
_plugins
 目录即可。

有什么想法吗?

编辑:我对实际代码的推理更感兴趣。我是想学习,不是求代码解决方案。

ruby plugins tags jekyll liquid
1个回答
6
投票
到目前为止已经有人回答了我的问题,我一直在调查这个问题。最后我得到了一个优雅的解决方案:

使用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
文件夹中的位置。
就这样:您在 

src

文件夹中生成文件,将它们标记为待复制,然后让 Jekyll 完成剩下的工作。

完全没有修改
site_process.rb

您可以在 GitHub 上查看生成的 LaTeX -> PNG 液体标签代码:

https://gitlab.com/felix.galindo/jekyll-liquid-latex-plugin

我还在那里实现了一种清理方法,以消除已修改和重建的帖子中生成的孤立文件。

© www.soinside.com 2019 - 2024. All rights reserved.