这是一篇用于全面测试 Hexo 渲染 Markdown 和生成文章目录 (TOC) 功能的测试文章。包含多种语法和嵌套标题结构。

引言

本文旨在全面测试 Hexo 环境下 Markdown 的渲染效果以及由此生成的文章目录 (Table of Contents, TOC) 功能。我们将涵盖标题、段落、列表、代码块、引用、链接、图片、表格、脚注等多种常用语法,并特别构建一个具有挑战性的标题层级结构,以验证 TOC 的生成深度和准确性。

请关注页面右侧(或根据你的主题配置的位置)生成的目录,并通过滚动页面和点击目录链接来测试其浮动和平滑滚动功能。


一级测试区:基础语法概览

这是文章的第一部分,我们先来快速预览一些基础的 Markdown 语法元素。

基础段落与强调

这是一个标准的 Markdown 段落。段落之间通过空行分隔。

你可以在文字中使用 斜体斜体 来强调。使用 粗体粗体 来突出重要内容。你甚至可以同时使用 粗斜体。如果你需要标记删除的内容,可以使用 删除线

列表测试

无序列表:

  • 苹果
  • 香蕉
  • 樱桃
    • 红色樱桃
    • 黑色樱桃
  • 日期

有序列表:

  1. 第一步:准备材料
  2. 第二步:混合
  3. 第三步:加热
    1. 在小火上加热
    2. 搅拌均匀
  4. 第四步:完成

混合列表:

  • 列表项 1
    1. 嵌套有序项 1.1
    2. 嵌套有序项 1.2
  • 列表项 2
    • 嵌套无序项 2.1
    • 嵌套无序项 2.2
      • 更深层的无序项 2.2.1

引用块(Blockquote)

这是一个简单的引用:

知识就是力量。

多行引用:

生活就像一盒巧克力,你永远不知道下一块是什么味道。

—— Gump

嵌套引用:

外层引用。

内层引用。

更深层引用。

水平分割线

你可以使用三个或更多的星号 ***、破折号 --- 或下划线 ___ 来创建水平分割线。




二级测试区:代码与链接

这一部分我们测试代码的展示和链接功能。

行内代码与代码块

这是一个包含 行内代码 的句子。

使用围栏代码块展示多行代码:

1
2
3
4
5
6
7
8
9
10
def factorial(n):
"""Calculates the factorial of a number."""
if n == 0:
return 1
else:
return n * factorial(n-1)

## Example usage
num = 5
print(f"The factorial of {num} is {factorial(num)}")

指定语言类型有助于代码高亮:

1
2
3
4
5
6
7
8
9
// JavaScript example
const message = "Hello, Hexo and Markdown!";
console.log(message);

function greet(name) {
return `Greetings, ${name}!`;
}

console.log(greet("Tester"));

链接测试

这是一个普通链接

带有标题的链接:带标题链接

参考式链接:参考链接示例

自动链接:https://www.example.com/auto

三级测试区:表格与脚注

表格和脚注在某些文档中也很常用。

表格测试

一个简单的表格:

列头 1 列头 2 列头 3
行 1 列 1 行 1 列 2 行 1 列 3
行 2 列 1 行 2 列 2 行 2 列 3

带有对齐方式的表格:

左对齐 居中对齐 右对齐
内容左侧 内容居中 内容右侧
另一行左侧 另一行居中 另一行右侧

脚注测试

这是一个带有脚注的句子^footnoteA。你可以在需要添加额外说明的地方使用脚注。

另一个句子,使用不同的脚注^footnoteB。脚注的顺序可以不同,但引用时会自动编号。

四级测试区:深层嵌套标题结构

这是本文的关键部分,用于测试 TOC 对深层标题的支持。我们将努力模拟一个具有多层分支的结构。

四级目录分支点 1.1

五级目录分支点 1.1.1

六级目录分支点 1.1.1.1
七级标题测试 1.1.1.1.1

这里是一些内容,可能是嵌套列表:

  1. 项目 A
    • 子项目 A.1
    • 子项目 A.2
  2. 项目 B
七级标题测试 1.1.1.1.2

这里是另一个 H6 标题下的内容。

1
echo "测试 H6 代码块"
七级标题测试 1.1.1.1.3

第三个 H6 标题的内容。

六级目录分支点 1.1.2
七级标题测试 1.1.2.1

内容。Code: console.log('Test');

七级标题测试 1.1.2.2

内容。

七级标题测试 1.1.2.3

内容。


总结

希望这篇测试文章包含了足够多样的 Markdown 语法以及复杂的标题结构,以帮助你验证 Hexo 主题的渲染能力和 TOC 功能。如果在某些地方渲染不正确或 TOC 有问题,你就可以根据这篇标准化的测试文章来定位问题。

Remember to clear Hexo cache and regenerate site files after adding/modifying posts:
hexo clean && hexo g && hexo s

祝测试顺利!


数和二叉树的定义

5.1.1 树的定义

树(Tree)是 $\begin{matrix} n & (n≥0) \end{matrix}$ 个结点的有限集,它或为空树($n=0$);或为非空树,对于非空树 $T$ :

  1. 有且仅有一个称之为根的结点;
  2. 除根结点以外的其余结点可分为 $\begin{matrix} m & (m>0) \end{matrix}$ 个互不相交的有限集 $T_1,T_2,\cdots ,T_m$ 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。

例如,在下图中,(a) 是只有一个根结点的树;(b) 是有 13 个结点的树,其中 $A$ 是根,其余结点分成 3 个互不相交的子集: $T_1={B,E,F,K,L}$ , $T_2={C,G}$ , $T_3={D,H,I,J,M}$ 。 $T_1$ 、 $T_2$ 和 $T_3$ 都是根 $A$ 的子树,且本身也是一棵树。例如 $T_1$ ,其根为 $B$ ,其余结点分为两个互不相交的子集: $T_{11}={E,K,L}$ , $T_{12}={F}$ 。 $T_{11}$ 和 $T_{12}$ 都是 $B$ 的子树。而 $T_{11}$ 中 $E$ 是根, ${K}$ 和 ${L}$ 是 $E$ 的两棵互不相交的子树,其本身又是只有一个根结点的树。

  • 树的示例
    树的示例

树的结构定义是一个递归的定义,即在树的定义中又用到树的定义,它道出了树的固有特性。树还可有其他的表示形式,如下图所示为上图 (b) 中树的各种表示。其中 (a) 是以嵌套集合(即是一些集合的集体,对于其中任何两个集合,或者不相交,或者一个包含另一个)的形式表示的;(b) 是以广义表的形式表示的,根作为由子树森林组成的表的名字写在表的左边;(c) 用的是凹入表示法(类似书的编目)。表示方法的多样化,正说明了树结构在日常生活中及计算机程序设计中的重要性。一般来说,分等级的分类方案都可用层次结构来表示,也就是说,都可由一个树结构来表示。

  • 树的其他 3 种表示法:
    树的其他3种表示法

下面介绍树结构中的一些基本术语。


5.1.2 树的基本术语

  1. 结点:树中的一个独立单元。包含一个数据元素及若干指向其子树的分支,如上数第二张图 (b) 中的 $A$ 、 $B$ 、 $C$ 、 $D$ 等。(下面术语中均以该图为例来说明)
  2. 结点的度:结点拥有的子树数称为结点的度。例如, $A$ 的度为 $3$ , $C$ 的度为 $1$ , $F$ 的度为 $0$ 。
  3. 树的度:树的度是树内各结点度的最大值。图 (b) 所示的树的度为 $3$ 。
  4. 叶子:度为 $0$ 的结点称为叶子或终端结点。结点 $K$ 、 $L$ 、 $F$ 、 $G$ 、 $M$ 、 $I$ 、 $J$ 都是树的叶子。
  5. 非终端结点:度不为 $0$ 的结点称为非终端结点或分支结点。除根结点之外,非终端结点也称为内部结点。
  6. 双亲和孩子:结点的子树的根称为该结点的孩子,相应地,该结点称为孩子的双亲。例如, $B$ 的双亲为 $A$ , $B$ 的孩子有 $E$ 和 $F$ 。
  7. 兄弟:同一个双亲的孩子之间互称兄弟。例如, $H$ 、 $I$ 和 $J$ 互为兄弟。
  8. 祖先:从根到该结点所经分支上的所有结点。例如, $M$ 的祖先为 $A$ 、 $D$ 和 $H$ 。
  9. 子孙:以某结点为根的子树中的任一结点都称为该结点的子孙。如 $B$ 的子孙为 $E$ 、 $K$ 、 $L$ 和 $F$ 。
  10. 层次:结点的层次从根开始定义起,根为第一层,根的孩子为第二层。树中任一结点的层次等于其双亲结点的层次加 $1$ 。
  11. 堂兄弟:双亲在同一层的结点互为堂兄弟。例如,结点 $G$ 与 $E$ 、 $F$ 、 $H$ 、 $I$ 、 $J$ 互为堂兄弟。
  12. 树的深度:树中结点的最大层次称为树的深度或高度。图 (b) 所示的树的深度为 $4$ 。
  13. 有序树和无序树:如果将树中结点的各子树看成从左至右是有次序的(即不能互换),则称该树为有序树,否则称为无序树。在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。
  14. 森林:是 $\begin{matrix} m & (m≥0) \end{matrix}$ 棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。由此,也可以用森林和树相互递归的定义来描述树。

就逻辑结构而言,任何一棵树都是一个二元组 $Tree=(root,F)$ ,其中 $root$ 是数据元素,称作树的根结点; $F$ 是 $\begin{matrix} m & (m≥0) \end{matrix}$ 棵树的森林, $F=(T_1,T_2,\cdots ,T_m)$ ,其中 $T=(r_i,F_i)$ 称作根 $root$ 的第 $i$ 棵子树;当 $m≠0$ 时,在树根和其子树森林之间存在下列关系:

$$RF=\lbrace\langle root,r_i\rangle\ |\ i=1,2,\cdots,m,\ m>0\rbrace$$

这个定义将有助于得到森林和树与二叉树之间转换的递归定义。


5.1.3 二叉树的定义

二叉树(Binary Tree)是 $\begin{matrix} n & (n≥0) \end{matrix}$ 个结点所构成的集合,它或为空树( $n=0$ );或为非空树,对于非空树 $T$ :

  1. 有且仅有一个称之为根的结点;
  2. 除根结点以外的其余结点分为两个互不相交的子集 $T_1$ 和 $T_2$ ,分别称为 $T$ 的左子树和右子树,且 $T_1$ 和 $T_2$ 本身又都是二叉树。

二叉树与树一样具有递归性质,二叉树与树的区别主要有以下两点:

  1. 二叉树每个结点至多只有两棵子树(即二叉树中不存在度大于 $2$ 的结点);
  2. 二叉树的子树有左右之分,其次序不能任意颠倒。

二叉树的递归定义表明二叉树或为空,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。由于这两棵子树也是二叉树,则由二叉树的定义,它们也可以是空树。由此,二叉树可以有 5 种基本形态,如图所示。

  • 二叉树的 5 种基本形态:
    二叉树的5种基本形态

5.1.2 小节 中引入的有关树的术语是都适用于二叉树。

1
2
3
4
5
6
7
#include <stdio.h>

int main(void)
{
printf("$$something$$\n");
return 0;
}
⬆︎TOP