跳转至

Mkdocs学习笔记

约 1210 个字 102 行代码 7 张图片 预计阅读时间 5 分钟

MkDocs常用命令

  • mkdocs new [dir-name] - 创建新项目.
  • mkdocs serve - 网页实时预览.
  • mkdocs build - 部署网站(静态).
  • mkdocs build --clean - 部署网站(静态),在发布新的版本之前,确保所有旧的文件都被清除并重新生成,进行站点更新后,确保不会有遗留的文件影响页面渲染.
  • mkdocs gh-deploy - 部署网站(GithubPage).

MkDocs-Markdown语法

字体样式

Text can be deleted and replacement text added. This can also be combined into onea single operation. Highlighting is also possible and comments can be added inline.

Formatting can also be applied to blocks by putting the opening and closing tags on separate lines and adding new lines between the tags and the content.

  • This was marked (highlight)
  • This was inserted (underline)
  • This was deleted (strikethrough)

字体颜色

<font color="#f79646">text</font>

text

更多颜色代码,参考:RGB色值查询

表格

Data table
| Method      | Description                          |
| ----------- | ------------------------------------ |
| `GET`       | :material-check:     Fetch resource  |
| `PUT`       | :material-check-all: Update resource |
| `DELETE`    | :material-close:     Delete resource |
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource
Data table, columns aligned to left
| Method      | Description                          |
| :---------- | :----------------------------------- |
| `GET`       | :material-check:     Fetch resource  |
| `PUT`       | :material-check-all: Update resource |
| `DELETE`    | :material-close:     Delete resource |
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource
Data table, columns centered
| Method      | Description                          |
| :---------: | :----------------------------------: |
| `GET`       | :material-check:     Fetch resource  |
| `PUT`       | :material-check-all: Update resource |
| `DELETE`    | :material-close:     Delete resource |
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource

Data table, columns aligned to right
| Method      | Description                          |
| ----------: | -----------------------------------: |
| `GET`       | :material-check:     Fetch resource  |
| `PUT`       | :material-check-all: Update resource |
| `DELETE`    | :material-close:     Delete resource |
Method Description
GET Fetch resource
PUT Update resource
DELETE Delete resource

代码块

def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]

附带标题

bubble_sort.py
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
``` py title="bubble_sort.py"
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
```

附带行号

为所有代码块显示行号

markdown_extensions:
  - pymdownx.highlight:
      linenums: true

为特定代码块显示行号

def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
```python linenums="1"
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
```

突出显示特定行

def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
```python linenums="1" hl_lines="2 3"
def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] > items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
```

分组代码块

#include <stdio.h>

int main(void) {
  printf("Hello world!\n");
  return 0;
}
#include <iostream>

int main(void) {
  std::cout << "Hello world!" << std::endl;
  return 0;
}
=== "C"

    ``` c
    #include <stdio.h>

    int main(void) {
      printf("Hello world!\n");
      return 0;
    }
    ```

=== "C++"

    ``` c++
    #include <iostream>

    int main(void) {
      std::cout << "Hello world!" << std::endl;
      return 0;
    }
    ```

链接文件

Attribute Lists

分割线

<div class="divider">
  <span class="divider-line"></span>
  <img class="divider-image" src="/img/mfea.svg">
  <span class="divider-line"></span>
</div>

数学公式

行内公式:\(a+b\)

行间公式 $$ a + b = c $$

按钮

Resource Resource Resource Resource

图片

原始大小

位移云图
Figure 1: 位移云图

更改大小

借助HTML语法

caption

字体颜色

这是一个红色的文本,使用 HTML 语法。

这是一个蓝色的文本,使用 HTML 语法。

列表

  • Lorem ipsum dolor sit amet, consectetur adipiscing elit
  • Vestibulum convallis sit amet nisi a tincidunt
    • In hac habitasse platea dictumst
    • In scelerisque nibh non dolor mollis congue sed et metus
    • Praesent sed risus massa
  • Aenean pretium efficitur erat, donec pharetra, ligula non scelerisque

tooltips

Hover me

The HTML specification is maintained by the W3C.

分列

  • \[a = b\]
  • hhh
  • import
  • 放放风
  • Sed sagittis eleifend rutrum
  • Donec vitae suscipit est
  • Nulla tempor lobortis orci
  1. Sed sagittis eleifend rutrum
  2. Donec vitae suscipit est
  3. Nulla tempor lobortis orci
Content tabs
=== "Unordered list"

    * Sed sagittis eleifend rutrum
    * Donec vitae suscipit est
    * Nulla tempor lobortis orci

=== "Ordered list"

    1. Sed sagittis eleifend rutrum
    2. Donec vitae suscipit est
    3. Nulla tempor lobortis orci

引用

这是一个引用块。 这是第二行。

  • 嵌套列表项
  • 另一个列表项

盒子

内置环境

Warning

这是一个警告框。

Info

这是一个信息框。

Note

这是一个注意框。

Tip

这是一个提示框。

Danger

这是一个危险框。

Quote

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Example

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Bug

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Failure

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Question

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Success

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

Abstract

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

自定义标题

Lorem ipsum

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

折叠盒子

Note

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

取消标题显示

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.

嵌入3D交互图像

以vedo库为例,需要先导出3D图像的html文件,然后采用<iframe>的方式嵌入。

plt = Plotter()
plt.export('embryo.html')

脚注

Lorem ipsum1 dolor sit amet, consectetur adipiscing elit.2

annotate

可作为补充说明、交叉引用。

Lorem ipsum dolor sit amet, (1) consectetur adipiscing elit(2).

  1. I’m an annotation! I can contain code, formatted text, images, … basically anything that can be expressed in Markdown.
  2. I’m an annotation! 位移云图

嵌入B站视频网页

<div style="text-align: center;">
  <!-- 外层容器:宽度100%,最大宽度800px(可根据需求调整),保持16:9比例 -->
  <div style="position: relative; width: 100%; max-width: 800px; padding-bottom: 56.25%; margin: auto; overflow: hidden;">
    <!-- iframe 绝对定位以填充容器,确保视频大小自适应 src末尾加入&autoplay=0,可默认暂停播放-->
    <iframe style="position: absolute; top: 0; left: 0; width: 80%; height: 80%;" 
            src="//player.bilibili.com/player.html?isOutside=true&aid=1355090172&bvid=BV1Jz421a7wU&cid=1557804198&p=1&autoplay=0" 
            scrolling="no" border="0" frameborder="0" allowfullscreen>
    </iframe>
  </div>
</div>

为 python 程序自动生成文档

MkDocs本身是一款静态站点生成器,主要用于从Markdown文件生成文档站点。但通过集成诸如mkdocstrings这样的插件,可以实现从Python源代码的docstring中自动提取文档,并将其嵌入到MkDocs生成的站点中。

Tip

需要在Python源代码中按照一定的格式编写文档字符串(docstrings),建议Google风格

::: mymodule.Calculator
    options:
        show_source: true
        heading_level: 3

A simple calculator class for basic arithmetic operations.

This class provides methods for multiplication and division.

Source code in docs\Document\编程语言\python\code\mymodule.py
class Calculator:
    """A simple calculator class for basic arithmetic operations.

    This class provides methods for multiplication and division.
    """

    def multiply(self, x: float, y: float) -> float:
        """Multiply two numbers.

        Args:
            x (float): The first multiplier.
            y (float): The second multiplier.

        Returns:
            float: The product of the two numbers.
        """
        return x * y

    def divide(self, numerator: float, denominator: float) -> float:
        """Divide the numerator by the denominator.

        Args:
            numerator (float): The dividend.
            denominator (float): The divisor.

        Returns:
            float: The quotient of the numerator divided by the denominator.

        Raises:
            ZeroDivisionError: If the denominator is zero.
        """
        if denominator == 0:
            raise ZeroDivisionError("Denominator cannot be zero.")
        return numerator / denominator

divide(numerator, denominator)

Divide the numerator by the denominator.

Parameters:

Name Type Description Default
numerator float

The dividend.

required
denominator float

The divisor.

required

Returns:

Name Type Description
float float

The quotient of the numerator divided by the denominator.

Raises:

Type Description
ZeroDivisionError

If the denominator is zero.

Source code in docs\Document\编程语言\python\code\mymodule.py
def divide(self, numerator: float, denominator: float) -> float:
    """Divide the numerator by the denominator.

    Args:
        numerator (float): The dividend.
        denominator (float): The divisor.

    Returns:
        float: The quotient of the numerator divided by the denominator.

    Raises:
        ZeroDivisionError: If the denominator is zero.
    """
    if denominator == 0:
        raise ZeroDivisionError("Denominator cannot be zero.")
    return numerator / denominator

multiply(x, y)

Multiply two numbers.

Parameters:

Name Type Description Default
x float

The first multiplier.

required
y float

The second multiplier.

required

Returns:

Name Type Description
float float

The product of the two numbers.

Source code in docs\Document\编程语言\python\code\mymodule.py
def multiply(self, x: float, y: float) -> float:
    """Multiply two numbers.

    Args:
        x (float): The first multiplier.
        y (float): The second multiplier.

    Returns:
        float: The product of the two numbers.
    """
    return x * y

  1. Lorem ipsum dolor sit amet, consectetur adipiscing elit. 

  2. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla et euismod nulla. Curabitur feugiat, tortor non consequat finibus, justo purus auctor massa, nec semper lorem quam in massa.