11

ドキュメント Jekyll のテンプレート データを読むと、レンダリングされていないコンテンツにアクセスする方法は次のようになると思われるかもしれませんpage.content。しかし、私が知る限り、これはマークダウンパーサーによって既にレンダリングされた投稿のコンテンツを提供しています。

単に html をマークダウンに変換しようとするのではなく、生の (元のマークダウン) コンテンツに直接アクセスするソリューションが必要です。

ユースケースの背景

私の使用例は次のとおりです: 私はpandoc プラグインを使用して Jekyll サイトのマークダウンをレンダリングし、「mathjax」オプションを使用してきれいな方程式を取得します。ただし、mathjax には JavaScript が必要なため、これらは RSS フィードに表示されません。次のpage.contentようにループして生成します。

 {% for post in site.posts %}
 <entry>
   <title>{{ post.title }}</title>
   <link href="{{ site.production_url }}{{ post.url }}"/>
   <updated>{{ post.date | date_to_xmlschema }}</updated>
   <id>{{ site.production_url }}{{ post.id }}</id>
   <content type="html">{{ post.content | xml_escape }}</content>
 </entry>
 {% endfor %}

xml_escapeフィルターが示すように、ここpost.contentに html が表示されます。生のコンテンツを取得できた場合 (想像するpost.contentrawなど)、「webtex」オプションを指定して pandoc を使用するフィルターを簡単に追加して、RSS フィードを解析するときに数式の画像を生成できます。たとえば、次のようになります。

require 'pandoc-ruby'
module TextFilter
  def webtex(input)
    PandocRuby.new(input, "webtex").to_html
  end
end
Liquid::Template.register_filter(TextFilter)

しかし、生のマークダウンではなく、html+mathjax で既にレンダリングされた方程式でコンテンツを取得すると、行き詰まります。マークダウンに戻すことは、mathjax を変換しない (単に文字化けするだけ) ため、役に立ちません。

助言がありますか?代わりに生のマークダウンを呼び出す方法は確かにありますか?

4

3 に答える 3

11

あなたが抱えていると思われる問題は次のとおりです 。 lib/jekyll/site.rb

私の読書によると、特定の投稿/ページの self.content は、convertible.rb の 79 行目で、Markdown と Liquid を介して self.content を実行した結果に置き換えられます。

self.content = Liquid::Template.parse(self.content).render(payload, info)

投稿は、site.rb の 37 ~ 44 行目と 197 ~ 211 行目に見られるように、ページの前にレンダリングされます。

def process
  self.reset
  self.read
  self.generate
  self.render
  self.cleanup
  self.write
end

... ...

def render
  payload = site_payload
  self.posts.each do |post|
    post.render(self.layouts, payload)
  end

  self.pages.each do |page|
    page.render(self.layouts, payload)
  end

  self.categories.values.map { |ps| ps.sort! { |a, b| b <=> a } }
  self.tags.values.map { |ps| ps.sort! { |a, b| b <=> a } }
rescue Errno::ENOENT => e
  # ignore missing layout dir
end

このページをレンダリングするまでに、self.content は HTML にレンダリングされているため、レンダリングを停止する必要はありません。すでに完了しています。

ただし、ジェネレーター ( https://github.com/mojombo/jekyll/wiki/Plugins ) はレンダリング段階の前に実行されるため、ソースを読んでわかる限り、かなり自明なジェネレーターを作成できるはずです。テンプレート {{ page.raw_content }} で raw Markdown として後でアクセスできる属性 (self.raw_content など) に self.content を複製します。

于 2012-11-01T20:05:11.120 に答える