如何撰写你的第一篇博文
在部署完毕的本主题中撰写博文的教程
本文目前尚在汉化中,如果您急需搭建博客,可转至另一篇文章。参见公告栏。
本教程将会指导你如何以 Chirpy 的风格编写博文,它值得你阅读,哪怕你曾经使用过Jekyll,,因为许多特性需要设置一些特定的变量。
命名和文档存储位置
创建一个名为 年-月-日-标题.扩展名
的文件并将其放在位于根目录下的 _posts
。需要注意, 扩展名
必须是 md
或 markdown
中的一个。如果你想节约在创建文件上花费的时间,请接入名为 Jekyll-Compose
的扩展以实现。
前文
首先,你需要填写 前文 ,它位于文章开头,格式如下:
1
2
3
4
5
6
---
title: 标题 #标题中带有英文方、圆括号等yml文件的特殊符号时,须用英文双引号"将标题括起来
date: 年-月-日 时:分:秒 +/-时区 # 例如 2024-10-10 10:00:00 +0800
categories: [一级分类, 二级分类]
tags: [标签] # 如果使用英文标签,必须为全小写
---
博文的 layout (即格式)已经默认被设为
post
所以在_前文_中没有必要再添加layout
变量。
时区
为了精确地记录文章发布的时间,你不仅应该在_config.yml
中设置timezone
变量,还要在博文前文的date
变量下提供时区数据,其格式为+-TTTT
,例如+0800
就是东八区。
分类与标签
每篇博文前文中的 categories
(分类)至多可以容纳两项, 而 tags
(标签)可为0到无穷个,例如:
1
2
3
4
---
categories: [Animal, Insect]
tags: [bee]
---
作者信息
作者信息通常无需在 前文 中填写——系统默认取配置文件中的social.links
的第一个条目和social.name
作为作者信息,但你也可以参照以下的方法来覆写这些数据:
在_data/authors.yml
中以如下格式加入作者信息 (如果你的网站中并没有这一文件,请不要犹豫,立刻创建一个)。
1
2
3
4
<作者的ID>: # ID是一个有别于你真名的标识符,该标识符会在前文中引入。
name: <作者全名>
twitter: <作者的推特> #如果没有推特账号,该项可删去。似乎也可改成其他社交账号。
url: <作者的主页>
然后在 前文 中引入关键词author
来输入单个作者名,或是引入authors
来输入多个作者名:
1
2
3
4
5
---
author: <作者的ID> # 对于单个作者
# 或者
authors: [<作者1的ID>, <作者2的ID>] # 对于多个作者
---
话虽如此,关键词author
其实也能识别多个作者名。
让你的作者信息能从
_data/authors.yml
被读取到的好处是使得网站具备了名为twitter:creator
的元标签,它使你的推特卡片更加丰富, 且对你的网站的搜索引擎优化有好处。
博文描述
默认地,博文的开头一小段会被用于在一系列博文的展示界面简述、更多阅读 部分和网站摘要数据流的XML文件中。如果你不想展示系统自动生成的博文的描述,你可以在 前文 中引入description
关键词来自定义描述,如下:
1
2
3
---
description: 博文的简短总结
---
此外,自定义description
关键词对应的文本也会被展示在博文界面中标题的下方。
Table of Contents
By default, the Table of Contents (TOC) is displayed on the right panel of the post. If you want to turn it off globally, go to _config.yml
and set the value of variable toc
to false
. If you want to turn off TOC for a specific post, add the following to the post’s Front Matter:
1
2
3
---
toc: false
---
Comments
The global switch of comments is defined by variable comments.active
in the file _config.yml
. After selecting a comment system for this variable, comments will be turned on for all posts.
If you want to close the comment for a specific post, add the following to the Front Matter of the post:
1
2
3
---
comments: false
---
Media
We refer to images, audio and video as media resources in Chirpy.
URL Prefix
From time to time we have to define duplicate URL prefixes for multiple resources in a post, which is a boring task that you can avoid by setting two parameters.
If you are using a CDN to host media files, you can specify the
cdn
in_config.yml
. The URLs of media resources for site avatar and posts are then prefixed with the CDN domain name.1
cdn: https://cdn.com
To specify the resource path prefix for the current post/page range, set
media_subpath
in the front matter of the post:1 2 3
--- media_subpath: /path/to/media/ ---
The option site.cdn
and page.media_subpath
can be used individually or in combination to flexibly compose the final resource URL: [site.cdn/][page.media_subpath/]file.ext
Images
Caption
Add italics to the next line of an image, then it will become the caption and appear at the bottom of the image:
1
2
![img-description](/path/to/image)
_Image Caption_
Size
To prevent the page content layout from shifting when the image is loaded, we should set the width and height for each image.
1
![Desktop View](/assets/img/sample/mockup.png){: width="700" height="400" }
For an SVG, you have to at least specify its width, otherwise it won’t be rendered.
Starting from Chirpy v5.0.0, height
and width
support abbreviations (height
→ h
, width
→ w
). The following example has the same effect as the above:
1
![Desktop View](/assets/img/sample/mockup.png){: w="700" h="400" }
Position
By default, the image is centered, but you can specify the position by using one of the classes normal
, left
, and right
.
Once the position is specified, the image caption should not be added.
Normal position
Image will be left aligned in below sample:
1
![Desktop View](/assets/img/sample/mockup.png){: .normal }
Float to the left
1
![Desktop View](/assets/img/sample/mockup.png){: .left }
Float to the right
1
![Desktop View](/assets/img/sample/mockup.png){: .right }
Dark/Light mode
You can make images follow theme preferences in dark/light mode. This requires you to prepare two images, one for dark mode and one for light mode, and then assign them a specific class (dark
or light
):
1
2
![Light mode only](/path/to/light-mode.png){: .light }
![Dark mode only](/path/to/dark-mode.png){: .dark }
Shadow
The screenshots of the program window can be considered to show the shadow effect:
1
![Desktop View](/assets/img/sample/mockup.png){: .shadow }
Preview Image
If you want to add an image at the top of the post, please provide an image with a resolution of 1200 x 630
. Please note that if the image aspect ratio does not meet 1.91 : 1
, the image will be scaled and cropped.
Knowing these prerequisites, you can start setting the image’s attribute:
1
2
3
4
5
---
image:
path: /path/to/image
alt: image alternative text
---
Note that the media_subpath
can also be passed to the preview image, that is, when it has been set, the attribute path
only needs the image file name.
For simple use, you can also just use image
to define the path.
1
2
3
---
image: /path/to/image
---
LQIP
For preview images:
1
2
3
4
---
image:
lqip: /path/to/lqip-file # or base64 URI
---
For normal images:
1
![Image description](/path/to/image){: lqip="/path/to/lqip-file" }
Video
Social Media Platform
You can embed videos from social media platforms with the following syntax:
1
{% include embed/{Platform}.html id='{ID}' %}
Where Platform
is the lowercase of the platform name, and ID
is the video ID.
The following table shows how to get the two parameters we need in a given video URL, and you can also know the currently supported video platforms.
Video URL | Platform | ID |
---|---|---|
https://www.youtube.com/watch?v=H-B46URT4mg | youtube | H-B46URT4mg |
https://www.twitch.tv/videos/1634779211 | twitch | 1634779211 |
https://www.bilibili.com/video/BV1Q44y1B7Wf | bilibili | BV1Q44y1B7Wf |
Video Files
If you want to embed a video file directly, use the following syntax:
1
{% include embed/video.html src='{URL}' %}
Where URL
is a URL to a video file e.g. /path/to/sample/video.mp4
.
You can also specify additional attributes for the embedded video file. Here is a full list of attributes allowed.
poster='/path/to/poster.png'
— poster image for a video that is shown while video is downloadingtitle='Text'
— title for a video that appears below the video and looks same as for imagesautoplay=true
— video automatically begins to play back as soon as it canloop=true
— automatically seek back to the start upon reaching the end of the videomuted=true
— audio will be initially silencedtypes
— specify the extensions of additional video formats separated by|
. Ensure these files exist in the same directory as your primary video file.
Consider an example using all of the above:
1
2
3
4
5
6
7
8
9
10
{%
include embed/video.html
src='/path/to/video.mp4'
types='ogg|mov'
poster='poster.png'
title='Demo video'
autoplay=true
loop=true
muted=true
%}
Audios
If you want to embed an audio file directly, use the following syntax:
1
{% include embed/audio.html src='{URL}' %}
Where URL
is a URL to an audio file e.g. /path/to/audio.mp3
.
You can also specify additional attributes for the embedded audio file. Here is a full list of attributes allowed.
title='Text'
— title for an audio that appears below the audio and looks same as for imagestypes
— specify the extensions of additional audio formats separated by|
. Ensure these files exist in the same directory as your primary audio file.
Consider an example using all of the above:
1
2
3
4
5
6
{%
include embed/audio.html
src='/path/to/audio.mp3'
types='ogg|wav|aac'
title='Demo audio'
%}
Pinned Posts
You can pin one or more posts to the top of the home page, and the fixed posts are sorted in reverse order according to their release date. Enable by:
1
2
3
---
pin: true
---
Prompts
There are several types of prompts: tip
, info
, warning
, and danger
. They can be generated by adding the class prompt-{type}
to the blockquote. For example, define a prompt of type info
as follows:
1
2
> Example line for prompt.
{: .prompt-info }
Syntax
Inline Code
1
`inline code part`
Filepath Highlight
1
`/path/to/a/file.extend`{: .filepath}
Code Block
Markdown symbols ```
can easily create a code block as follows:
1
2
3
```
This is a plaintext code snippet.
```
Specifying Language
Using ```{language}
you will get a code block with syntax highlight:
1
2
3
```yaml
key: value
```
The Jekyll tag
{% highlight %}
is not compatible with this theme.
Line Number
By default, all languages except plaintext
, console
, and terminal
will display line numbers. When you want to hide the line number of a code block, add the class nolineno
to it:
1
2
3
4
```shell
echo 'No more line numbers!'
```
{: .nolineno }
Specifying the Filename
You may have noticed that the code language will be displayed at the top of the code block. If you want to replace it with the file name, you can add the attribute file
to achieve this:
1
2
3
4
```shell
# content
```
{: file="path/to/file" }
Liquid Codes
If you want to display the Liquid snippet, surround the liquid code with {% raw %}
and {% endraw %}
:
1
2
3
4
5
6
7
{% raw %}
```liquid
{% if product.title contains 'Pack' %}
This product's title contains the word Pack.
{% endif %}
```
{% endraw %}
Or adding render_with_liquid: false
(Requires Jekyll 4.0 or higher) to the post’s YAML block.
Mathematics
We use MathJax to generate mathematics. For website performance reasons, the mathematical feature won’t be loaded by default. But it can be enabled by:
1
2
3
---
math: true
---
After enabling the mathematical feature, you can add math equations with the following syntax:
- Block math should be added with
$$ math $$
with mandatory blank lines before and after$$
- Inserting equation numbering should be added with
$$\begin{equation} math \end{equation}$$
- Referencing equation numbering should be done with
\label{eq:label_name}
in the equation block and\eqref{eq:label_name}
inline with text (see example below)
- Inserting equation numbering should be added with
- Inline math (in lines) should be added with
$$ math $$
without any blank line before or after$$
- Inline math (in lists) should be added with
\$$ math $$
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!-- Block math, keep all blank lines -->
$$
LaTeX_math_expression
$$
<!-- Equation numbering, keep all blank lines -->
$$
\begin{equation}
LaTeX_math_expression
\label{eq:label_name}
\end{equation}
$$
Can be referenced as \eqref{eq:label_name}.
<!-- Inline math in lines, NO blank lines -->
"Lorem ipsum dolor sit amet, $$ LaTeX_math_expression $$ consectetur adipiscing elit."
<!-- Inline math in lists, escape the first `$` -->
1. \$$ LaTeX_math_expression $$
2. \$$ LaTeX_math_expression $$
3. \$$ LaTeX_math_expression $$
Starting with
v7.0.0
, configuration options for MathJax have been moved to fileassets/js/data/mathjax.js
, and you can change the options as needed, such as adding extensions.
If you are building the site viachirpy-starter
, copy that file from the gem installation directory (check with commandbundle info --path jekyll-theme-chirpy
) to the same directory in your repository.
Mermaid
Mermaid is a great diagram generation tool. To enable it on your post, add the following to the YAML block:
1
2
3
---
mermaid: true
---
Then you can use it like other markdown languages: surround the graph code with ```mermaid
and ```
.
Learn More
For more knowledge about Jekyll posts, visit the Jekyll Docs: Posts.