跳转至

Markdown

约 1803 个字 103 行代码 7 张图片 预计阅读时间 7 分钟

参考视频

1. 介绍

Markdown CommonMark 标准文档 什么是Markdown?

  • 是一种轻量级文本标记语言(markup language)
  • 可以通过纯文本来表示带有格式的文档,同时保证易读性
  • 语法简单,易于学习,易于使用
  • 可以轻松转换为 HTML(映射到 HTML 的子集)

Markdown 本质是一种标记语言,是对HTML的一种简化

  • 所有的最终视觉上的效果都由HTML + CSS 决定的

image-20231223190035181

2. 语法概述

标题

Note

# + 空格(开头),后跟内容 Ps: # 和标题间至少一个空格

  • 使用 # 的称为 ATX 样式
  • 只有 1~6 级标题,7级以上不会变成标题格式
  • 可以跨过某一级,但不推荐
    • 明确好层级关系

段落

Note

  • 直接编写文本即为普通段落
  • 段落间通过空行来分割(有空行就有新的段落)
  • 段落内换行需要在行尾加两个空格(<br>)

关于空格:

  • 多个连续的空格会被解析为一个空格
  • 但是在代码块中,空格会被保留
  • 使用多个空格可以使用&nbsp; &emsp;等 HTML语法

引言

Note

一个 > 加一个空格后面跟内容

  • 内部可任意嵌套并使用MD语法
  • 连续的>属于同一引言, 使用Enter来进行退出

列表

无序列表

Note

- + * 后加空格再跟内容

- node 1
- node 2

  content in node 2
- node 3
* 第一层
    + 第二层
        * 第三层
    + 第二层
* 第一层

有序列表

Note

数字加点(.) 后接空格 再接内容

分割线 & 代码块

Note

使用* - _ 中任意一个字符重复至少三次

会被转换为html 中的<hr>
PS : 分割线上下最好都加空行

Note

使用三个或以上 ` 或 ~ 围起来构成代码块

  • ' 或~ 后面可以加语言名称,可进行高亮

行内标记

*斜体*         _也是斜体_  
**粗体**      __也是粗体__
***粗斜体***   ___也是粗斜体___
`行内代码`
~~删除线~~
<u>下划线</u>
若要显示原本用于格式化 Markdown 文档的字符,在字符前面添加反斜杠字符 \ 。

插入图片和链接

Note

![图片描述](图片位置/URL)

常规 MD 语法插入图片无法调大小,使用 html 中img 的 style 可以调节

<img src="图片位置" alt="图片描述" style="..."/>

Note

插入链接: 方括号[] 和 圆括号()组合 => [文字描述](链接URL)

PS: markdown 中一般可以直接使用 html 语法和 css 样式

e.g 图片居中: 也可right, left

1
2
3
<div align=center>
    <img src="" alt="" style=""/>
</div>

3. 扩展语法

表格

| Syntax      | Description | Test Text     |
| :---        |    :----:   |          ---: |
| Header      | Title       | Here's this   |
| Paragraph   | Text        | And more      |
输出如下:

Syntax Description Test Text
Header Title Here's this
Paragraph Text And more

在标题行中的连字符左侧,右侧或两侧添加冒号: 将列中的文本对齐到左,右或居中

仅可处理简单的表格,关于复杂的表格

脚注

Note

使用[^脚注名]插入脚注

在文中任意位置添加[^脚注名]:脚注内容 来定义脚注内容

  • 脚注名只是标记、匹配使用的,可以是任何字符串
  • 最终的编号一般由在**文中出现的顺序**决定

PS: 详见PY&MD

任务列表

Note

使用- [ ] 插入未完成任务 ; 使用- [x]  插入未完成任务

  • 可以和其它列表混合使用

如:

- [ ] to do list
- [x] finished
生成如下:

  • to do list
  • finished

公式

Note

一般使用一对$作为行内公式标记,一对$$作为块级公式标记

关于公式处理的一切都不在 markdown->HTML 的过程中,如图所示:

Ps: 关于流程图 / 时序图 / 甘特图.. -> 参考mermaid.js

4.markdown编辑器

5. 关于mkdocs

基于 python 的静态网站生成器,适合笔记本 / 文档类网站

PS: 真的好看!!(✧∀✧)

实现逻辑: 所有都在 mkdocs.yml 中进行配置,通过 nav 规定网站导航,从中读取 md 源文件,解析后嵌入主题的 HTML 框架中

常用命令:

$ pip install mkdocs # 安装
$ mkdocs new <name>  # 新建
$ mkdocs serve       # 实时预览
$ mkdocs build       # 构建
$ mkdocs gh-deploy   # 部署

Python Markdown

关于MD在mkdocs里面的一些特殊用法,即支持的Extensions

Note

均需要在mkdocs.yml内的markdown_extensions项内进行添加配置,然后进行使用。

  1. abbr 缩写或名词。用作对一些专有名词(缩写)进行额外的解释,可用*[]来定义

    The HTML specification is maintained by the W3C.
    *[HTML]: Hyper Text Markup Language
    *[W3C]: World Wide Web Consortium
    
    显示为 : The HTML specification is maintained by the W3C.

    (PS: 示例来自官网)

  2. admonition 警告或标注, 用于提供辅助内容

    如何使用?

    • 以 !!! 开头,后跟一个用作类型限定的关键字。内容在下一行,需要缩进四个空格
      • 若以???开头,则内容是可以折叠的

    常见关键词: note, abstract, tip, success, question, warning, failure, danger, bug, quote

    默认情况下,标题 = 类型限定关键字,但可以通过在关键字后面添加带引号的关键字来修改,并且引号里面支持Markdown

    E.g. !!! note "Hello World!", 显示如下:

    Hello World!

    内联块(即侧边栏),使用inline + end修饰符

    e.g. !!! inline note 为左对齐,而!!! inline end note 为右对齐

    若想要添加自定义警告的类型,只需要颜色和*.svg图标 → 参考

  3. attr_list 属性列表, 允许为所有内联和块级元素添加属性,将任何链接变成按钮,使用花括号对其进行后缀并将.md-button类选择器添加到其中

    e.g.[百度](https://www.baidu.com){.md-button}→ 百度

    若要显示一个填充的主按钮,同时添加.md-button--primary

    • e.g. [百度](https://www.baidu.com){.md-button .md-button--primary}
  4. def_list 定义列表,可用枚举任意键值对的列表,例如函数或模块的参数

    Example

    `param1`
    : xxxx
    
    `param2`
    : yyyy
    
    param1
    xxx
    param2
    yyyy
  5. footnotes 行内脚注, 用方括号括起来,开头必须插入符号^,具体内容再另起一行进行定义

    Example

    Lorem ipsum[^1] dolor sit amet, consectetur adipiscing elit.[^2]
    
    [^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.
    

    显示结果 : Lorem ipsum1 dolor sit amet, consectetur adipiscing elit.2

  6. md_in_html

    默认,Markdown 会忽略原始 HTML 块级元素中的任何内容,启用扩展后,原始 HTML 块级元素的内容可以解析为 Markdown

    在 HTML 扩展中使用带有文字 figure 和 figcaption 标签的 Markdown,可做图片标题或者说明。

    <figure markdown>
        ![Image title](https://dummyimage.com/600x400/){ width="300" }
        <figcaption>Image caption</figcaption>
    </figure>
    

    Image title
    Image caption

  7. 格式化

    • pymdownx.caret 插入角标符号^, 此时下划线可用^^HELLO^^
      • HELLO
    • pymdownx.mark 插入双等号==, 可进行高亮
      • HELLO
    • pymdownx.keys 插入键盘键以及组合
      • ++enter++ → Enter
      • ++ctrl+alt+del++ → Ctrl+Alt+Del
  8. 代码高亮 pymdownx.highlight

    Example

        ``` py 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]
        ```
    
    1
    2
    3
    4
    5
    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]
        ```
    
    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 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]
        ```
    
    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]
    
  9. pymdownx.tabbed 内容选项卡

    === "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;
        }
        ```
    

    如下所示:

    #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;
    }
    

    当然也可以用别的类型的,比如note,example 等等

    Example

    !!! example
    
        === "Unordered List"
    
            ``` markdown title="List, unordered"
            * Sed sagittis eleifend rutrum
            * Donec vitae suscipit est
            * Nulla tempor lobortis orci
            ```
    
        === "Ordered List"
    
            ``` markdown title="List, ordered"
            1. Sed sagittis eleifend rutrum
            2. Donec vitae suscipit est
            3. Nulla tempor lobortis orci
            ```
    
    List, unordered
    * Sed sagittis eleifend rutrum
    * Donec vitae suscipit est
    * Nulla tempor lobortis orci
    
    List, ordered
    1. Sed sagittis eleifend rutrum
    2. Donec vitae suscipit est
    3. Nulla tempor lobortis orci
    
  10. 图表 mermaid

    Example

        ``` mermaid
            graph LR
            A[Start] --> B{Error?};
            B -->|Yes| C[Hmm...];
            C --> D[Debug];
            D --> B;
            B ---->|No| E[Yay!];
        ```
    
        graph LR
        A[Start] --> B{Error?};
        B -->|Yes| C[Hmm...];
        C --> D[Debug];
        D --> B;
        B ---->|No| E[Yay!];
  11. emoji


  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. ↩

颜色主题调整

快来和我聊天~

可以的话请给我赞和 star喔~    =>  GitHub stars

评论