标签及资源文件的使用,页面内容使用规范,内容引入规范
标签插件
标签插件和Front-matter
中的标签不同,它们是用于在文章中快速插入特定内容的插件。
虽然你可以使用任何格式书写你的文章,但是标签插件永远可用,且语法也都是一致的。
标签插件不应该被包裹在Markdown
语法中,例如:[]()
是不被支持的。
引用块
在文章中插入引言,可包含作者、来源和标题。
别号: quote1
2
3{% blockquote [author[, source]] [link] [source_link_title] %}
content
{% endblockquote %}
示例
输出blockquote
没有提供参数,则只输出普通的blockquote1
2
3{% blockquote %}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque hendrerit lacus ut purus iaculis feugiat. Sed nec tempor elit, quis aliquam neque. Curabitur sed diam eget dolor fermentum semper at eu lorem.
{% endblockquote %}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque hendrerit lacus ut purus iaculis feugiat. Sed nec tempor elit, quis aliquam neque. Curabitur sed diam eget dolor fermentum semper at eu lorem.
引用书上的句子
1 | {% blockquote David Levithan, Wide Awake %} |
Do not just seek happiness for yourself. Seek happiness for all. Through kindness. Through mercy.
引用 Twitter
1 | {% blockquote @DevDocs https://twitter.com/devdocs/status/356095192085962752 %} |
NEW: DevDocs now comes with syntax highlighting. http://devdocs.io
引用网络上的文章
1 | {% 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.
代码块
在文章中插入代码。
别名: code1
2
3{% codeblock [title] [lang:language] [url] [link text] [additional options] %}
code snippet
{% endcodeblock %}
以 option:value
的格式指定额外选项,例如:line_number:false first_line:5。
额外选项 | 描述 | 默认值 |
---|---|---|
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 | {% codeblock %} |
1 | alert('Hello World!'); |
指定语言
1 | {% codeblock lang:objc %} |
1 | [rectangle setX: 10 y: 10 width: 20 height: 20]; |
附加说明
1 | {% codeblock Array.map %} |
1 | array.map(callback[, thisArg]) |
附加说明和网址
1 | {% codeblock _.compact http://underscorejs.org/#compact Underscore.js %} |
反引号代码块
另一种形式的代码块,不同的是它使用三个反引号来包裹。[language] [title] [url] [link text] code snippet
Pull Quote
在文章中插入 Pull quote。1
2
3{% pullquote [class] %}
content
{% endpullquote %}
jsFiddle
在文章中嵌入 jsFiddle。1
{% jsfiddle shorttag [tabs] [skin] [width] [height] %}
Gist
在文章中嵌入 Gist。1
{% gist gist_id [filename] %}
iframe
在文章中插入 iframe。1
{% iframe url [width] [height] %}
Image
在文章中插入指定大小的图片。1
{% img [class names] /path/to/image [width] [height] '"title text" "alt text"' %}
Link
在文章中插入链接,并自动给外部链接添加 target="_blank"
属性。1
{% link text url [external] [title] %}
Include Code
插入 source/downloads/code
文件夹内的代码文件。source/downloads/code
不是固定的,取决于你在配置文件中 code_dir
的配置。1
{% include_code [title] [lang:language] [from:line] [to:line] path/to/file %}
嵌入test.js文件全文
1 | {% include_code lang:javascript test.js %} |
只嵌入第3行
1 | {% include_code lang:javascript from:3 to:3 test.js %} |
嵌入第5行至第8行
1 | {% include_code lang:javascript from:5 to:8 test.js %} |
嵌入第5行至结束
1 | {% include_code lang:javascript from:5 test.js %} |
嵌入第1行至第8行
1 | {% include_code lang:javascript to:8 test.js %} |
Youtube
在文章中插入 Youtube 视频。1
{% youtube video_id [type] [cookie] %}
视频
1 | {% youtube lJIrF4YjHfQ %} |
播放列表
1 | {% youtube PL9hW1uS6HUfscJ9DHkOSoOX45MjXduUxo 'playlist' %} |
隐私模式
在这种模式下,禁用 YouTube cookie1
2{% youtube lJIrF4YjHfQ false %}
{% youtube PL9hW1uS6HUfscJ9DHkOSoOX45MjXduUxo 'playlist' false %}
Vimeo
在文章中插入 Vimeo 视频。1
{% vimeo video_id %}
引用文章
引用其他文章的链接。1
2{% post_path filename %}
{% post_link filename [title] [escape] %}
在使用此标签时可以忽略文章文件所在的路径或者文章的永久链接信息、如语言、日期。
例如,在文章中使用<a href="#">Post not found: how-to-bake-a-cake</a>
时,只需有一个名为how-to-bake-a-cake.md
的文章文件即可。即使这个文件位于站点文件夹的source/posts/2015-02-my-family-holiday
目录下、或者文章的永久链接是2018/en/how-to-bake-a-cake
,都没有影响。
默认链接文字是文章的标题,你也可以自定义要显示的文本。
默认对文章的标题和自定义标题里的特殊字符进行转义。可以使用escape
选项,禁止对特殊字符进行转义。
链接使用文章的标题
1 | {% post_link hexo-3-8-released %} |
链接使用自定义文字
1 | {% post_link hexo-3-8-released '通往文章的链接' %} |
对标题的特殊字符进行转义
1 | {% post_link hexo-4-released 'How to use <b> tag in title' true %} |
禁止对标题的特殊字符进行转义
1 | {% post_link hexo-4-released '<b>bold</b> custom title' false %} |
引用资源
引用文章的资源,与 资源文件夹 一起使用。1
2
3{% asset_path filename %}
{% asset_img [class names] slug [width] [height] [title text [alt text]] %}
{% asset_link filename [title] [escape] %}
嵌入图片
hexo-renderer-marked 3.1.0+ 可以(可选)自动解析图片的文章路径,参考 本节 如何启用它。
“foo.jpg” 位于 http://example.com/2020/01/02/hello/foo.jpg。
默认(无选项)
1 | {% asset_img foo.jpg %} |
自定义 class 属性
1 | {% asset_img post-image foo.jpg %} |
展示尺寸
1 | {% asset_img foo.jpg 500 400 %} |
title 和 alt 属性
1 | {% asset_img logo.svg "lorem ipsum'dolor'" %} |
Raw
如果您想在文章中插入 Swig 标签,可以尝试使用 Raw 标签,以免发生解析异常。1
2
3{% raw %}
content
{% endraw %}
文章摘要和截断
在文章中使用<!-- more -->
,那么<!-- more -->
之前的文字将会被视为摘要。首页中将只出现这部分文字,同时这部分文字也会出现在正文之中。
例如:1
2
3Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
<!-- more -->
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
首页中将只会出现1
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
正文中则会出现1
2
3Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
注意,摘要可能会被 Front Matter 中的 excerpt 覆盖
资源文件夹
全局资源文件夹
资源(Asset)代表 source
文件夹中除了文章以外的所有文件,例如图片、CSS、JS 文件等。比方说,如果你的Hexo项目中只有少量图片,那最简单的方法就是将它们放在 source/images
文件夹中。然后通过类似于![](/images/image.jpg)
的方法访问它们。
文章资源文件夹
对于那些想要更有规律地提供图片和其他资源以及想要将他们的资源分布在各个文章上的人来说,Hexo也提供了更组织化的方式来管理资源。
这个稍微有些复杂但是管理资源非常方便的功能可以通过将config.yml
文件中的post_asset_folder
选项设为true
来打开。
1 | post_asset_folder: true |
当资源文件管理功能打开后,Hexo将会在你每一次通过hexo new [layout] <title>
命令创建新文章时自动创建一个文件夹。
这个资源文件夹将会有与这个文章文件一样的名字。
将所有与你的文章有关的资源放在这个关联文件夹中之后,你可以通过相对路径来引用它们,这样你就得到了一个更简单而且方便得多的工作流。
相对路径引用的标签插件
通过常规的 markdown
语法和相对路径来引用图片和其它资源可能会导致它们在存档页或者主页上显示不正确。
在Hexo 2
时代,社区创建了很多插件来解决这个问题。
但是,随着Hexo 3
的发布,许多新的标签插件被加入到了核心代码中。
这使得你可以更简单地在文章中引用你的资源。
1 | {% asset_path slug %} |
比如说:当你打开文章资源文件夹功能后,你把一个example.jpg
图片放在了你的资源文件夹中,
如果通过使用相对路径的常规markdown
语法![](example.jpg)
,它将 不会 出现在首页上。(但是它会在文章中按你期待的方式工作)
正确的引用图片方式是使用下列的标签插件而不是 markdown :1
{% asset_img example.jpg This is an example image %}
通过这种方式,图片将会同时出现在文章和主页以及归档页中。
使用 Markdown 嵌入图片
hexo-renderer-marked 3.1.0
引入了一个新的选项,其允许你无需使用asset_img
标签插件就可以在markdown
中嵌入图片
如需启用:1
2
3
4post_asset_folder: true
marked:
prependRoot: true
postAsset: true
启用后,资源图片将会被自动解析为其对应文章的路径。
例如: image.jpg
位置为 /2020/01/02/foo/image.jpg
,
这表示它是 /2020/01/02/foo/
文章的一张资源图片,![](image.jpg)
将会被解析为 <img src="/2020/01/02/foo/image.jpg">
。
数据文件
有时您可能需要在主题中使用某些资料,而这些资料并不在文章内,并且是需要重复使用的,
那么您可以考虑使用 Hexo 3.0 新增的「数据文件」功能。
此功能会载入source/_data
内的YAML
或JSON
文件,如此一来您便能在网站中复用这些文件了。
举例来说,在source/_data
文件夹中新建menu.yml
文件:1
2
3Home: /
Gallery: /gallery/
Archives: /archives/
您就能在模板中使用这些资料:1
2
3<% for (var link in site.data.menu) { %>
<a href="<%= site.data.menu[link] %>"> <%= link %> </a>
<% } %>
渲染结果如下 :1
2
3<a href="/"> Home </a>
<a href="/gallery/"> Gallery </a>
<a href="/archives/"> Archives </a>