标签插件(Tag Plugins)是 Hexo 提供的一套特殊语法,让你能在文章中快速插入引用块、代码块、图片、视频等复杂内容。你可以把它们想象成文章中的“预制构件”,无需手写复杂的 HTML,只需一个简单的标签指令,Hexo 就会自动将其渲染成精美的样式。
需要特别注意的是,标签插件与 Front-matter 中的 tags(标签)完全不同:前者是用于排版和插入内容的功能组件,后者是用于文章分类的元数据。此外,标签插件的语法是独立的,绝不能包裹在 Markdown 语法中。例如,写成 []({% post_path lorem-ipsum %}) 是无效的,必须直接裸露使用。
以下是对各类核心标签插件的详细解析。
引用块 (Blockquote)
别名:quote。这是展示引文、名言或推文的利器,支持显示作者、来源和链接。
语法格式:
1 | {% blockquote [author[, source]] [link] [source_link_title] %} |
引用内容
参数说明:
author:作者姓名。source:来源书名或文章名。link:来源链接。source_link_title:链接显示的标题文本。
常见用法示例:
- 普通引用(无参数)
1
2
3{% blockquote %}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
{% endblockquote %}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
作用:仅渲染一段缩进的引用文本,无额外信息。
引用书籍
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 Levithan” 和来源 “Wide Awake”。
引用 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” 和可点击的推文链接。
引用网络文章
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 | {% codeblock [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
2
3{% codeblock %}
alert('Hello World!');
{% endcodeblock %}1
alert('Hello World!');
作用:展示代码,默认开启高亮和行号。
指定语言
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 的语法高亮规则。
带标题和链接
1
2
3{% codeblock Array.map %}
array.map(callback[, thisArg])
{% endcodeblock %}Array.map 1
array.map(callback[, thisArg])
作用:代码块上方显示标题 “Array.map”。
完整参数(标题 + 语言 + 链接 + 链接文本)
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”。
高级控制(行号阈值与高亮行)
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 | \```[language] [title] [url] [link text] |
1 | 代码内容 |
资源嵌入与多媒体
Hexo 提供了多种标签用于嵌入外部资源或本地文件。
1. Pull Quote (强调引用)
用于在文中突出显示某段话。
1 | {% pullquote [class] %} |
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.yml 的 code_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 | {% raw %} |
帖子摘要 (More Tag)
用于手动定义文章摘要的截断点。在文章中使用 <x!-- more -->(去除x),其之前的内容将作为摘要显示在首页。
- 优先级规则:如果在 Front-matter 中已经定义了
excerpt字段,则以 Front-matter 为准;否则,以<x!-- more -->(去除x) 为界。
示例结构:
1 | 这是摘要部分,会显示在首页。 |
通过灵活运用这些标签插件,你可以极大地丰富博客的表现力,同时保持 Markdown 源文件的简洁与易读。