【问题标题】:Copying generated files from a Jekyll plugin to a site resource folder将生成的文件从 Jekyll 插件复制到站点资源文件夹
【发布时间】:2013-11-19 02:03:46
【问题描述】:

我正在Jekyll 中开发一个插件,它插入一个名为latex 的新液体标签(块标签)。其目的是通过这种方式在 post 源文件中插入一块 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 源代码将通过latexdvipsconvert 的链式执行进行编译。所以它将依赖于外部程序(TexLive 和 ImageMagick)。

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

但是我卡住了:我想将生成的 PNG 图像放到 destination 输出文件夹内的这个文件夹中。定义一个站点配置变量来定义文件夹没有问题(事实上,我就是这样做的),也没有把文件放在那里。问题很简单:我可以写入source文件夹,但是生成的文件不会复制到destination文件夹

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

我找到了这个 SO 条目:“How to generate files from Liquid blocks in Jekyll?”,但答案感觉不对:您必须为要复制的文件进行两次构建。

也找到了“Generate file inside _site with Jekyll plugin”,但这不适用,因为我不想通过模板渲染文档。

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

  • 保留一个文件夹,其中包含所有生成的文件以及它们最终放置的一些索引策略。
  • 为最终的放置过程实现Sitewide 方法,类似于:

    class Site
        def generate_latex_adds
            // Code that copies the generated files to destination folders
        end
    end
    
  • site_process.rb 脚本中,在self.cleanupself.write 调用之前添加调用该方法的self.generate_latex_adds

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

有什么想法吗?

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

【问题讨论】:

    标签: ruby plugins tags jekyll liquid


    【解决方案1】:

    到目前为止,有人回答了我的问题,我一直在调查这个问题。最后我得到了一个优雅的解决方案:使用Jekyll::StaticFile。我错过了那门课(旁注:请仔细阅读文档)。

    当您将此类的一个对象添加到site.static_files 数组时,您会将此文件标记为待复制渲染过程完成后。实际上,此类文件的复制是在site.write 进程中完成的。查看 Jekyll 安装中的 site_process.rb 文件。

    这个类的使用很简单。当您需要标记文件以供将来复制时,您只需执行如下代码:

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

    pathfilename 的位置取决于您的文件在 src 文件夹中的位置。

    仅此而已:您在src 文件夹中生成文件,将它们标记为待复制,然后让 Jekyll 完成剩下的工作。 完全没有修改site_process.rb

    您可以在 GitHub 上查看生成的 LaTeX -> PNG 液体标签代码:https://github.com/fgalindo/jekyll-liquid-latex-plugin

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 2021-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多