Liquid 标签过滤器(Tags Filters)

所有标准的 Liquid标签 都是受支持的。 Jekyll 内置了一些标签来帮助你构建网站。你也可以使用插件 创建自己的标签。

包含文件(Includes)

如果你的网站中有一些重复使用的页面片段,使用 include 是一种更易维护的方式。

代码片段高亮

得益于 Rouge,Jekyll 内置支持超过 100 种语言的语法高亮。
Rouge 是 Jekyll 3 及以上版本的默认高亮工具。

使用 Pygments 已被弃用,并且在 Jekyll 4 中不再支持; 配置项 highlighter: pygments 会自动回退到使用 Rouge。 Rouge 使用 Ruby 编写,并且与 Pygments 的样式表 100% 兼容。

要渲染带语法高亮的代码块,可以按如下方式包裹代码:

{% highlight ruby %}
def foo
  puts 'foo'
end
{% endhighlight %}

上面示例中的 ruby是用于 highlight 标签的语言标识符参数。要找到你想高亮的语言对应的标识符,请在 Rouge wiki 中查找对应语言的“短名称”。

Jekyll 会处理代码块中的所有 Liquid 过滤器

如果你使用的语言包含花括号,你 很可能需要将 {% raw %}{% endraw %} 标签包裹在代码外层。 自 Jekyll 4.0 起,你可以在 front matter 中添加 render_with_liquid: false 来完全禁用某个文档的 Liquid 处理。

行号

highlight 还有第二个可选参数 linenos
添加 linenos 参数会让高亮代码显示行号。例如下面的代码块会在每一行旁边显示行号:

{% highlight ruby linenos %}
def foo
  puts 'foo'
end
{% endhighlight %}

标记指定行4.4.0

你可以通过可选参数 mark_lines 来标记代码中的特定行。 该参数接收一个空格分隔的行号列表,并且必须用双引号包裹。例如下面的代码块会标记第 1 行和第 2 行,但不会标记第 3 行:

{% highlight ruby mark_lines="1 2" %}
def foo
  puts 'foo'
end
{% endhighlight %}

默认情况下,被标记的行会应用类名 hll

语法高亮样式表

为了让高亮效果生效,你需要引入一个高亮样式表。对于 Pygments 或 Rouge,你可以使用 Pygments 的样式表示例。你可以在这里找到示例库:
这里,或者从其 代码仓库 获取。

将 CSS 文件(例如 native.css)复制到你的 css 目录中,然后在你的 main.css 中引入语法高亮样式:

@import "native.css";

自 Jekyll 4.0 起,你不需要在 linkpost_url 标签前添加 site.baseurl

链接到页面

要链接到文章、页面、集合条目或文件,可以使用 link 标签,它会根据你指定的路径生成正确的永久链接 URL。例如,如果你使用 link 标签链接到 mypage.html,即使你更改了 permalink 风格(包含或移除文件扩展名),生成的 URL 仍然是有效的。

使用 link 标签时必须包含文件的原始扩展名。示例如下:

{% link _collection/name-of-document.md %}
{% link _posts/2016-07-26-name-of-post.md %}
{% link news/index.html %}
{% link /assets/files/doc.pdf %}

你也可以在 Markdown 中这样使用 link 标签创建链接:

[链接到文档]({% link _collection/name-of-document.md %})
[链接到文章]({% link _posts/2016-07-26-name-of-post.md %})
[链接到页面]({% link news/index.html %})
[链接到文件]({% link /assets/files/doc.pdf %})

文章、页面或集合的路径是相对于站点根目录(即配置文件所在目录)的路径,而不是从当前页面到目标页面的相对路径。

例如,如果你在 page_a.md(位于 pages/folder1/folder2)中链接到 page_b.md(位于 pages/folder1),你的链接路径不应该是 ../page_b.html,而应该是 /pages/folder1/page_b.md

如果不确定路径,可以在页面中添加 {{ page.path }} 来查看当前路径。

使用 linkpost_url 标签的一个主要优点是链接校验。如果链接不存在,Jekyll 会直接构建失败。这是好事,因为它可以提醒你修复错误链接,而不是发布一个包含坏链接的网站。

注意:你不能在 link 标签上使用过滤器。例如,你不能写 {% link mypage.html | append: "#section1" %}。如果需要链接到页面的某个锚点,需要使用 HTML 或 Markdown 的常规方式。

你也可以使用变量来指定文件名,而不是直接写死文件名。例如,在 front matter 中定义变量:

---
title: My page
my_variable: footer_company_a.html
---

然后在链接中引用变量:

{% link {{ page.my_variable }} %}

在示例中,link标签将呈现到文件footer_company_a.html的链接。

链接到文章

如果你想链接到站点中的文章,可以使用 post_url 标签生成正确的永久链接:

{% post_url 2010-07-21-name-of-post %}

如果文章位于子目录中,需要包含子目录路径:

{% post_url /subdir/2010-07-21-name-of-post %}

使用 post_url 时不需要文件扩展名。

你也可以在 Markdown 中这样使用:

[链接名称]({% post_url 2010-07-21-name-of-post %})

假设你有一个数据文件_data/cool_posts.yaml,用于记录你希望列为优质文章的特定文章:

- title: "An Awesome Post"
  slug: "2010-07-21-name-of-post"
- title: "Another Awesome Post"
  slug: "2016-07-26-name-of-post"

你也可以使用post_url标签来列出这些文章(从4.5.0 版本开始支持):

Cool posts:

{%- for cool_post in site.data.cool_posts %}
- [{{ cool_post.title }}]({% post_url {{ cool_post.slug }} %})
{%- endfor %}