1

という名前の新しい Liquid タグ (ブロックタグ) を挿入するプラグインをJekylllatexで開発しています。目的は、次のように投稿ソース ファイル内に 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 ...

出力ポストには、コンパイルされると Liquid Tag ブロックの代わりにタグが含まれ、LaTeX ソースは, ,<img>の連鎖実行によってコンパイルされます。したがって、外部プログラム (TexLive および ImageMagick) に依存します。latexdvipsconvert

これまでの説明で問題は見つかりませんでした。LaTeX のブロックを取得して一時ファイルに入れ、最終的に PNG にコンパイルできます。レンダリングされたファイルは、投稿と同じフォルダーに配置する必要があります。

しかし、私は立ち往生destinationしています:生成されたPNG画像を出力フォルダー内のこのフォルダーに入れたいです。フォルダーを定義するために site-config 変数を定義しても問題ありません (実際、私はそうしています)。そこにファイルを配置することもできません。問題は単純です。フォルダーに書き込むことはできますが、生成されたファイルはフォルダーsourceにコピーされませんdestination

理由はわかっています。Jekyll が最初に生成し、後でレンダリングします。コピー プロセスはレンダリング パーツの前に行われるため、生成されたファイルはコピーされません。

SO エントリ「How to generate files from Liquid blocks in Jekyll?」を見つけましたが、その答えは適切ではありません。ファイルをコピーするには、2 パス ビルドを作成する必要があります。

「 Jekyll プラグインを使用して _site 内にファイルを生成する」も見つかりましたが、テンプレートでドキュメントをレンダリングしたくないため、これは当てはまりません。

私が計画してきた解決策は次のとおりです。

  • 最終的な配置のために、生成されたすべてのファイルといくつかのインデックス戦略を含むフォルダーを保持します。
  • Site次のような最終的な配置手順のワイド メソッドを実装します。

    class Site
        def generate_latex_adds
            // Code that copies the generated files to destination folders
        end
    end
    
  • and呼び出しの直前にself.generate_latex_adds、スクリプト内でそのメソッドの呼び出しを追加します。site_process.rbself.cleanupself.write

これでおそらく問題は解決するでしょうが、site_process.rb . この Liquid タグを GitHub プロジェクトとしてコミュニティにプルすることを検討しているため、この手動編集をsite_process.rbこのプラグインのユーザーに文書化する必要があります。おそらく一般的な状況であり、一般的な解決策であることはわかっていますが、コア ファイルを変更せずに生成されたファイルのコピーを延期するより良い方法があるかどうか疑問に思っています。プラグインをシンプルにしたいと思います。プラグイン ファイルを_pluginsディレクトリにコピーするだけです。

何か案は?

編集:実際のコードでの推論にもっと興味があります。コードの解決策を求めるのではなく、学びたい。

4

1 に答える 1