avatar Nihil

Nichts Hsu

  • 首页
  • 子域
  • 分类
  • 标签
  • 归档
  • 关于
首页 Markdown 一些奇技淫巧
文章

Markdown 一些奇技淫巧

发表于 2021/04/15 更新于 2022/12/30
作者 Nichts Hsu
5 分钟阅读
Markdown 一些奇技淫巧
Markdown 一些奇技淫巧

列表内分段

举个例子,假如我们想要在列表中换行,最简单的办法就是双空格法:

1
2
3
4
5
6
7
* 第一项第一行  <!-- 注意这里有两个空格 -->
第一项第二行
* 第二项第一行  <!-- 注意这里有两个空格 -->
```
一段代码
```  <!-- 注意这里有两个空格 -->
第二项第二行

效果:

  • 第一项第一行
    第一项第二行
  • 第二项第一行
    1
    
    一段代码
    

    第二项第二行

但是这种做法有点太暴力了,我更倾向于使用下面的方法:

1
2
3
4
5
6
7
8
9
10
11
* 第一项第一行

  第一项第二行

* 第二项第一行

  ```
  一段代码
  ```

  第二项第二行

效果:

  • 第一项第一行

    第一项第二行

  • 第二项第一行

    1
    
    一段代码
    

    第二项第二行

Markdown 代码段中的代码段

如果你要写 Markdown 代码段,但是又在代码段里使用代码段,比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 在 markdown 中使用代码段

你可以使用 ```` ``` ```` 包裹代码段使代码染色,并且可以指定代码的语言:

```markdown
使用 C++ 写一个 `Hello World` 程序吧:

```cpp
#include <iostream>

int main(int argc, char *argv[])
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}
```
```

但是这样写解析器会炸裂的,```markdown 会匹配第一个 ```,然后第二个 ``` 会被视为新的代码段起始点把剩下的内容全部包裹起来。

正确的写法是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## 在 markdown 中使用代码段

你可以使用 ```` ``` ```` 包裹代码段使代码染色,并且可以指定代码的语言:

````markdown
使用 C++ 写一个 `Hello World` 程序吧:

```cpp
#include <iostream>

int main(int argc, char *argv[])
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}
```
````

即:在外层使用四个 ` 来表示代码框。同理,继续叠代码框就需要写五个 `,六个 `…

对于行内代码也是同理,外层的 ` 比内层多就行了,比如 ``a`b`` 就会显示为 a`b,```` ``` ```` 会显示为 ```。

HTML 标签内使用 Markdown

很多人都知道,可以在 Markdown 中混入 HTML 标签以实现 Markdown 不好做到的效果。但是可能有人并不清楚怎么在 Markdown 中的 HTML 标签内部再启用 Markdown 语法。事实上,只要一个块前后都用空行包围,解析器就会对这一块启用 Markdown 语法。

例如:

1
2
3
4
5
6
<details>
<summary>点击此处展开</summary>

这里是重新启用了 `Markdown` 语法的段落,比如:**加粗**,*斜体*。

</details>

效果:

点击此处展开

这里是重新启用了 Markdown 语法的段落,比如:加粗,斜体。

注意,对 kramdown 不起作用

但是 kramdown 有自己的办法,你可以在 HTML 标签中增加一条属性 markdown="1" 对该标签内部启用 Markdown 语法解析,此时不需要空行即可。上述的例子在 kramdown 下应写为:

1
2
3
4
<details markdown="1">
<summary>点击此处展开</summary>
这里是重新启用了 `Markdown` 语法的段落,比如:**加粗**,*斜体*。
</details>

切记不要随便给 HTML 标签缩进,否则容易被解析器当成 Markdown 的缩进来渲染。

如果想要在表格中使用代码框,也可以用这种办法,例如:

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
27
28
29
30
31
32
33
<table>
<thead>
<tr>
<th>结构</th><th>示例</th>
</tr>
</thead>
<tbody>
<tr>
<td>if-else</td>
<td>

```c
if (expr)
    stmt;
else
    stmt;
```

</td>
</tr>
<tr>
<td>for</td>
<td>

```c
for (init; expr; incr)
    stmt;
```

</td>
</tr>
</tbody>
</table>

效果:

结构 示例
if-else
1
2
3
4
if (expr)
    stmt;
else
    stmt;
for
1
2
for (init; expr; incr)
    stmt;
教程, Markdown
markdown 教程
本文由作者按照 CC BY 4.0 进行授权
分享

最近更新

  • 『I Wanna』 Best Bye To 2016
  • [译] Rust 中的内联
  • [Rust] 幽灵索引类型与匿名结构体
  • [C++] 深入了解左值与右值
  • Android.bp 中启用 openmp
外部链接
  • 996.icu
  •  此博客的 Github 仓库
  •  Olimi 的个人博客

文章内容

相关文章

2022/11/01

在高版本系统上为 Qt6 生成 AppImage

前言 目前,大部分的 AppImage 的教程与工具都建议你在最低所支持的系统上进行编译打包,这是由于 Linux 系统的兼容性,在旧版本系统打包的软件可以正常在新版本系统中运行,反过来则不行。 但是这一点对于 Qt 用户尤其是 Qt6 用户而言很不友好:一方面,在旧版本的 Linux 系统上很难安装高版本的 Qt,另一方面,过于老旧的 GCC 不支持大量的 C++ 新特性,需要对代码进...

2022/09/27

为使用 Rouge 的 Jekyll 主题添加高亮指定行的功能

前言 实际上,这个功能在 Jekyll 的 Issue #8621 上早有讨论,但是时至今日这个功能迟迟没有进展。 相关的讨论者提出了一些简易的 Ruby 脚本,但是这些脚本功能并不完整,例如不支持行号。但是奈何本人又不会 Ruby,只能考虑另辟蹊径,通过 JS 来实现行高亮。 二月时写了一个效果较差的版本,近日重新写了一个更好一点的版本,因此重写本帖。 Ruby 脚本在生成站点时静...

2022/01/11

Git 从基础到进阶

前言 Git 是什么 想象这么一个场景,你和你的几个同事一起开发一个应用,假设同事 A 修改了代码 1,同事 B 修改了代码 2,你自己修改了代码 3,要如何将你们的修改安全、准确地同步到所有人的电脑上?如果有一天,应用突然运行不了了,你尝试 debug 无果,想要回退到上一次能够正常运行的代码版本,你要如何操作? 这就是为什么我们需要版本控制工具。它们对代码的提交和修改进行纪录,方便...

使用 Valine 替换 Chirpy 主题中的 Disqus 评论系统

Rust 中函数与闭包与 Fn Traits 探讨

© 2024 Nichts Hsu. 保留部分权利。

本站采用 Jekyll 主题 Chirpy

热门标签

编程语言 教程 rust c++ android c++20 usb 翻译 linux qt

发现新版本的内容。