hexo 学习 0020:hexo tag plugins

标签插件(Tag Plugins)是 Hexo 提供的一套特殊语法,让你能在文章中快速插入引用块、代码块、图片、视频等复杂内容。你可以把它们想象成文章中的“预制构件”,无需手写复杂的 HTML,只需一个简单的标签指令,Hexo 就会自动将其渲染成精美的样式。

需要特别注意的是,标签插件与 Front-matter 中的 tags(标签)完全不同:前者是用于排版和插入内容的功能组件,后者是用于文章分类的元数据。此外,标签插件的语法是独立的,绝不能包裹在 Markdown 语法中。例如,写成 []({% post_path lorem-ipsum %}) 是无效的,必须直接裸露使用。

以下是对各类核心标签插件的详细解析。

引用块 (Blockquote)

别名:quote。这是展示引文、名言或推文的利器,支持显示作者、来源和链接。

语法格式:

1
2
3
{% blockquote [author[, source]] [link] [source_link_title] %}
引用内容
{% endblockquote %}

引用内容

[author[source]] [link] [source_link_title]

参数说明:

  • author:作者姓名。
  • source:来源书名或文章名。
  • link:来源链接。
  • source_link_title:链接显示的标题文本。

常见用法示例:

  1. 普通引用(无参数)
    1
    2
    3
    {% blockquote %}
    Lorem ipsum dolor sit amet, consectetur adipiscing elit.
    {% endblockquote %}

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

作用:仅渲染一段缩进的引用文本,无额外信息。

  1. 引用书籍

    1
    2
    3
    {% blockquote David Levithan, Wide Awake %}
    Do not just seek happiness for yourself. Seek happiness for all.
    {% endblockquote %}

    Do not just seek happiness for yourself. Seek happiness for all.

    David LevithanWide Awake

    作用:底部显示作者 “David Levithan” 和来源 “Wide Awake”。

  2. 引用 Twitter

    1
    2
    3
    {% blockquote @DevDocs https://twitter.com/devdocs/status/356095192085962752 %}
    NEW: DevDocs now comes with syntax highlighting.
    {% endblockquote %}

    NEW: DevDocs now comes with syntax highlighting.

    作用:底部显示作者 “@DevDocs” 和可点击的推文链接。

  3. 引用网络文章

    1
    2
    3
    {% blockquote Seth Godin http://sethgodin.typepad.com/seths_blog/2009/07/welcome-to-island-marketing.html Welcome to Island Marketing %}
    Every interaction is both precious and an opportunity to delight.
    {% endblockquote %}

    Every interaction is both precious and an opportunity to delight.

    作用:底部显示作者、链接以及自定义的链接标题 “Welcome to Island Marketing”。

代码块 (Code Block)

别名:code。用于在文章中展示高亮代码片段,支持行号、特定行高亮等高级功能。

语法格式:

1
2
3
{% codeblock [title] [lang:language] [url] [link text] [additional options] %}
代码内容
{% endcodeblock %}

效果:

[title] [lang:language] [url] [link text] [additional options]
1
代码内容

额外选项参数(格式为 option:value):

  • line_number: 是否显示行号。默认 true
  • line_threshold: 只有当代码行数超过此值时才显示行号。默认 0
  • highlight: 是否启用语法高亮。默认 true
  • first_line: 指定起始行号。默认 1
  • mark: 高亮特定行。用逗号分隔,范围用破折号。例如 mark:1,4-7,10 表示高亮第 1 行、4 到 7 行以及第 10 行。
  • wrap: 是否用 <table> 包裹代码块。默认 true

常见用法示例:

  1. 基础代码块

    1
    2
    3
    {% codeblock %}
    alert('Hello World!');
    {% endcodeblock %}
    1
    alert('Hello World!');

    作用:展示代码,默认开启高亮和行号。

  2. 指定语言

    1
    2
    3
    {% codeblock lang:objc %}
    [rectangle setX: 10 y: 10 width: 20 height: 20];
    {% endcodeblock %}
    1
    [rectangle setX: 10 y: 10 width: 20 height: 20];

    作用:使用 Objective-C 的语法高亮规则。

  3. 带标题和链接

    1
    2
    3
    {% codeblock Array.map %}
    array.map(callback[, thisArg])
    {% endcodeblock %}
    Array.map
    1
    array.map(callback[, thisArg])

    作用:代码块上方显示标题 “Array.map”。

  4. 完整参数(标题 + 语言 + 链接 + 链接文本)

    1
    2
    3
    {% codeblock _.compact http://underscorejs.org/#compact Underscore.js %}
    _.compact([0, 1, false, 2, '', 3]);
    {% endcodeblock %}
    _.compactUnderscore.js
    1
    _.compact([0, 1, false, 2, '', 3]);

    作用:显示标题,并提供指向 Underscore.js 文档的链接,链接文字为 “Underscore.js”。

  5. 高级控制(行号阈值与高亮行)

    1
    2
    3
    4
    5
    {% codeblock lang:js line_number:false first_line:5 mark:1,3 %}
    console.log("Line 5");
    console.log("Line 6");
    console.log("Line 7");
    {% endcodeblock %}
    console.log("Line 5");
    console.log("Line 6");
    console.log("Line 7");

    作用:不显示行号,起始行号设为 5,并高亮相对位置的第 1 行和第 3 行。

反引号简写形式:
除了标签语法,你也可以使用三个反引号来创建代码块,效果相同:

1
2
3
\```[language] [title] [url] [link text]
代码内容
\```
[title] [url] [link text]
1
代码内容

资源嵌入与多媒体

Hexo 提供了多种标签用于嵌入外部资源或本地文件。

1. Pull Quote (强调引用)
用于在文中突出显示某段话。

1
2
3
{% pullquote [class] %}
content
{% endpullquote %}

content

参数 class 可选,用于添加自定义 CSS 类名。

2. Iframe
插入任意 iframe 内容。

1
{% iframe url [width] [height] %}

示例:{% iframe https://example.com 100% 200 %}

3. 图片 (Img)
插入指定大小的图片。

1
{% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %}

注意:标题和 alt 文本需用双引号包裹,若内部有引号需转义。

4. 链接 (Link)
插入链接,自动为外部链接添加 target="_blank"

1
{% link text url [external] [title] %}
  • external: 可选,强制指定是否为外部链接。
  • title: 可选,链接的 title 属性。

5. 包含代码文件 (Include Code)
source/downloads/code 目录(可通过 _config.ymlcode_dir 修改)直接读取代码文件内容。

1
{% include_code [title] [lang:language] [from:line] [to:line] path/to/file %}

参数组合示例:

  • 全文嵌入:{% include_code lang:javascript test.js %}
  • 仅嵌入第 3 行:{% include_code lang:javascript from:3 to:3 test.js %}
  • 嵌入第 5 至 8 行:{% include_code lang:javascript from:5 to:8 test.js %}
  • 从第 5 行到结尾:{% include_code lang:javascript from:5 test.js %}
  • 从开头到第 8 行:{% include_code lang:javascript to:8 test.js %}

6. 文章内链 (Post Link)
用于在文章中链接到另一篇 Hexo 文章,无需关心文章的具体路径或永久链接变动。

1
{% post_link filename [title] [escape] %}
  • filename: 目标文章的源文件名(不含 .md 后缀)。
  • title: 可选,自定义链接文字。默认为目标文章标题。
  • escape: 可选,是否对标题中的特殊字符进行转义。默认 true。设为 false 可允许 HTML 标签。

示例:

  • 默认标题:{% post_link hexo-3-8-released %}
  • 自定义文本:{% post_link hexo-3-8-released 'Link to a post' %}
  • 禁止转义(允许 HTML):{% post_link hexo-4-released 'bold custom title' false %}

7. 资产资源 (Asset)
配合“资源文件夹”功能使用,引用与文章同目录下的资源文件。

  • 获取路径:{% asset_path filename %}
  • 插入图片:{% asset_img [class names] slug [width] [height] [title text [alt text]] %}
  • 插入链接:{% asset_link filename [title] [escape] %}

asset_img 示例:

  • 默认:{% asset_img foo.jpg %}
  • 加类名:{% asset_img post-image foo.jpg %}
  • 指定尺寸:{% asset_img foo.jpg 500 400 %}
  • 加标题和 Alt:{% asset_img foo.jpg "lorem ipsum'dolor'" %} (注意引号处理)

已移除的插件说明

在 Hexo 7.0.0 及更高版本中,以下标签插件已被移除。如果你需要使用这些功能,请安装第三方插件 hexo-tag-embed 作为替代:

  • jsfiddle: 嵌入 jsFiddle 代码演示。
  • gist: 嵌入 GitHub Gist。
  • youtube: 嵌入 YouTube 视频(支持隐私模式)。
  • vimeo: 嵌入 Vimeo 视频。

URL 生成工具 (Hexo 7.0.0+)

这两个标签用于生成符合配置的路径,避免硬编码 URL。

1. url_for
返回带有根路径前缀(root)的 URL。

1
{% url_for text path [relative] %}
  • relative: 可选,布尔值。是否输出相对路径。默认遵循 _config.yml 中的 relative_link 设置。
  • 示例:{% url_for blog index.html false %} 强制输出绝对路径 /index.html,即使配置了相对链接。

2. full_url_for
返回带有完整域名前缀(config.url)的 URL。

1
{% full_url_for text path %}
  • 示例:若配置 url: https://example.com/blog,则 {% full_url_for index /a/path %} 输出 https://example.com/blog/a/path

其他实用标签

Raw 标签
当文章内容中包含可能与 Hexo 标签语法冲突的代码(如 Liquid 或 Nunjucks 语法)时,使用 raw 包裹可防止被错误渲染。

1
2
3
{% raw %}
{{ variable }} 或 {% if condition %}
{% endraw %}

帖子摘要 (More Tag)
用于手动定义文章摘要的截断点。在文章中使用 <x!-- more -->(去除x),其之前的内容将作为摘要显示在首页。

  • 优先级规则:如果在 Front-matter 中已经定义了 excerpt 字段,则以 Front-matter 为准;否则,以 <x!-- more -->(去除x) 为界。

示例结构:

1
2
3
这是摘要部分,会显示在首页。
<!-- more -->
这是正文部分,只在文章详情页显示。

通过灵活运用这些标签插件,你可以极大地丰富博客的表现力,同时保持 Markdown 源文件的简洁与易读。