【问题标题】:Jekyll automatic table of contentsJekyll 自动目录
【发布时间】:2012-11-20 20:29:10
【问题描述】:

我已经为Apache Buildr 的网站建立了一个基于 Jekyll 代码的网站。 Buildr 网站会根据textile 格式文件中的标题自动为每个页面生成一个目录。

例如,您使用纺织品标记出这样的标题来编写页面。 .

h2(#why).  Why are we doing this?

BLah blah balh etc ..


h2(#something). Some other header

BLah blah balh etc ..

然后,在默认 HTML 中,您有一些代码将内容通过管道传输到名为 toc 的内容中,然后您将内容放入其中。比如……

<div id='content'>
 <h1 id='{{ page.title | downcase | replace(' ', '_') }}'>{{ page.title }}</h1>
  {{ content | toc }}
  {{ content }}
</div>

在 Apache 站点上,他们得到了想要的结果(目录显示在内容之后)。但是,在我的网站上,内容会呈现两次。没有生成目录。

此外,如果我直接从 github 克隆 Apache Buildr 项目并在该项目的 doc 文件夹中运行 jekyll --server,则也不会生成目录。

我错过了什么?

【问题讨论】:

    标签: html ruby web jekyll tableofcontents


    【解决方案1】:

    我向 Builder 开发者邮件列表发送了电子邮件,有人告诉我 look here 寻求灵感。原来相关代码sn-p是...

    module TocFilter
      def toc(input)
        output = "<ol class=\"toc\">"
        input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).each do |entry|
          id = (entry[1][/^id=(['"])(.*)\1$/, 2] rescue nil)
          title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
          if id
            output << %{<li><a href="##{id}">#{title}</a></li>}
          else
            output << %{<li>#{title}</li>}
          end
        end
        output << '</ol>'
        output
      end
    end
    Liquid::Template.register_filter(TocFilter)
    

    在您网站的源文件夹中创建一个名为 _plugins 的文件夹,然后将此代码粘贴到该文件夹​​中名为 TocFilter.rb 的文件中。

    有效!!

    【讨论】:

    • 我已将此添加到我的_plugins 文件夹中,但似乎什么也没发生。你知道Table of Contents Plus吗?它在第一个标题之前生成一个类似于维基百科的目录(当找到至少 x 个标题时)。它会自动向标题添加锚点。像这样的东西会很酷!
    【解决方案2】:

    toc 在哪里定义?它没有被列为标准液体过滤器或 jekyll 扩展之一,因此您可能缺少插件。

    【讨论】:

    • 令人讨厌的是,如果我从 github 克隆 buildr 项目并在该项目的 doc 文件夹中运行 jekyll --server。也不生成目录。他们在隐藏一些东西:/
    【解决方案3】:

    我在 Jekyll 支持的 Github 博客上使用了 ghiculescu's JS TOC。它工作得很好。

    Example.

    【讨论】:

      【解决方案4】:

      jekyll-toc 插件开箱即可为您做到这一点。

      将以下内容添加到您的GemFile

      gem 'jekyll-toc'
      

      将以下内容添加到您的_config.yml

      plugins:
        - jekyll-toc
      

      在您希望生成 TOC 的位置添加以下液体标签。

      {{ content | toc_only }}
      

      最后在您帖子的front-matter 中设置toc: true

      我在我的_config.yml 中添加了这个值作为默认值,因此 TOC 默认应用于我的所有帖子。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 2021-02-09
        • 1970-01-01
        • 2014-01-22
        相关资源
        最近更新 更多