【发布时间】: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 源代码将通过latex、dvips、convert 的链式执行进行编译。所以它将依赖于外部程序(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.cleanup和self.write调用之前添加调用该方法的self.generate_latex_adds。
这样大概可以解决问题,但是我觉得修改site_process.rb有问题。我正在考虑将此 Liquid Tag 作为 GitHub 项目拉入社区,因此,我必须将 site_process.rb 的手动编辑记录给此插件的用户。我知道这可能是一种常见的情况和常见的解决方案,但我想知道是否有更好的方法可以在不修改核心文件的情况下推迟生成文件的副本。我想让插件保持简单:只需将插件文件复制到_plugins 目录即可。
有什么想法吗?
编辑:我对实际代码的推理更感兴趣。我想学习,而不是要求代码解决方案。
【问题讨论】:
标签: ruby plugins tags jekyll liquid