易读易写,码字高效率标记语言Markdown介绍与进阶

  1. 基础篇
    1. 标题
    2. 段落与断行
    3. 链接
      1. 自动链接
      2. 引用链接
    4. 列表
      1. 无序列表
      2. 有序列表
      3. 多级子列表
      4. 任务列表
    5. 表格
    6. 图片
    7. 代码
    8. 引用
  2. 提高篇:媲美任何格式化文字工具。
    1. 兼容HTML元素
    2. 流程图、时序图等
    3. 支持公式
    4. 文档格式转换
  3. 上手尝试
  4. 参考编辑工具
  5. 引用

在介绍Markdown之前,你想想你现在的文字工具,真正用在思考、写作上的时间占比是多少?除去这些时间又在干什么?让我想起来写论文的时候总是因为各种格式字体问题,被导师挑了毛病。标题字体不一致,间距不等,无符号列表关联关系错误等等。

Markdown是一种语言格式,用户只需要按照固定格式编写文字,Markdown引擎将负责其解析为html格式的文件。对应的样式文件负责其展示效果。Markdown让你专心于文字、内容本身,而非格式化。现在已经非常流行,已然成为趋势。总之,你需要理解的是,简单的符号格式如何将让你的码字效率倍增?你将带着这个问题,直到最后实践。

在研发人员中,Markdown使用比较广泛。他们使用这种工具有一个特点,只是记录一些文字,简单到可以在记事本中完成,亦或者NotePad++,而没有必要打开Word等重量型文字工具。

Markdown的渲染可以由多种语言实现。最初是由John Gruber使用Perl脚本实现渲染。使用易读易写的纯文本格式编写文档,即将md格式的文本,渲染为Html格式,浏览器用文件。

Markdown备受欢迎的特征总结如下:

具体的使用,让我们打开Markdown暗箱,先剖析,后实践。

基础篇

如何更专注写作,而不是关注排版?

举个例子:突然思如泉涌的你想出来若干个点子,需要一个列表来展示。Word中的做法,需要先写内容,再格式化。格式化是需要时间成本的,真的与必要在选择具体是怎么样的图标花费时间吗?

这就是Markdown为你免去的其中一部分的烦恼。列表的图标你再不用去特别的设置,这部分时间已经由Markdown引擎负责解析你只需要完成的内容上下文是否还有其他子列表。

来看一个例子:

- 开放能力
- 共享资源
- 加速创新
- 持续共赢

通过Markdown引擎的渲染之后的效果:

重视文字内容本身,而非排版或UI。

以下部分,展示如何书写一个Markdown格式的文件中涉及的标题、段落、列表、表格、图片等元素。

标题

可以在标题内容前输入特定数量的井号(‘#’)来实现对应级别的HTML样式的标题(HTML提供六级标题)。例如:

atx形式:

# 一级标题

#### 四级标题

一级和二级标题还有一种写法(Setext):

一级标题
===================

二级标题
--------------------

本文的目录,就是抽取文章中标题的继承关系,集合而成的。

段落与断行

段落的前后必须是空行

链接

最简单的超链接:

[超链接文本](http://www.example.com)

自动链接

Markdown支持以比较简短的自动链接形式来处理网址和电子邮件信箱,只要认为是一个http协议的地址,将会被Markdown 自动转成链接。

http://www.apollo.auto

以上格式,将被直接解析为一个指向自己的链接:
http://www.apollo.auto

引用链接

有时,一堆链接与文字放在一起,非常地不“易读”,可以使用引用链接,先将链接标注,再在文章任意位置,放置该链接标签与地址的定义关系。

你可以使用[][]的方式,在第一个方括号,放置链接文字,第二个中括号包含引用链接标签。在任意位置定义该标签即可。示例如下:

Apollo项目中,1.0参考硬件有:[Neousys Nuvo-5095GC][5095GC]、[ESD CAN-PCIe/402][can-pcie402]、[NovAtel SPN-IGM-A1][SPN-IGM-A1]、[NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1][IMU-IGM-A1]、[高性能GNSS天线GPS703][GPS703]。

[5095GC]:http://www.neousys-tech.com/cn/support/resources/category/162-manual
[can-pcie402]:https://esd.eu/en/products/can-pcie402
[SPN-IGM-A1]:https://www.novatel.com/products/span-gnss-inertial-systems/span-combined-systems/span-igm-a1/
[IMU-IGM-A1]:https://www.novatel.com/products/span-gnss-inertial-systems/span-imus/span-mems-imus/imu-igm-a1/#overview
[GPS703]:https://www.novatel.com/products/gnss-antennas/high-performance-gnss-antennas/gps-703-ggg-hv/

Apollo项目中,1.0参考硬件有:Neousys Nuvo-5095GCESD CAN-PCIe/402NovAtel SPN-IGM-A1NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1高性能GNSS天线GPS703

列表

无序列表
Apollo1.5开放的五大能力:
- 障碍物感知
- 决策规划
- 高精地图
- 云端仿真
- End-To-End学习能力

以上的物料列表将被展示为:
Apollo1.5开放的五大能力:

有序列表
Apollo1.5开放的五大能力:
1. 障碍物感知
2. 决策规划
3. 高精地图
4. 云端仿真
5. End-To-End学习能力

以上的物料列表将被展示为:
Apollo1.5开放的五大能力:

  1. 障碍物感知
  2. 决策规划
  3. 高精地图
  4. 云端仿真
  5. End-To-End学习能力
多级子列表

Apollo1.5开放的五大能力:

尝试1:在文后尝试做出有序数字列表的上述版本。

任务列表

今天运动2+1闭环完成情况:

- [ ] 舞力全开100千卡
- [x] 日行一万步
- [x] 午饭过后4000步
- [x] 晚饭5000步
- [ ] 周末游泳1000米+

表格

|     关键硬件名称     | 型号 |             产品主页                |
| :------------ | ---: | :-------------------------------: |
| IPC | Neousys Nuvo-5095GC | [产品手册][5095GC] |
| CAN 卡 | ESD CAN-PCIe/402 | [产品主页][can-pcie402] |
| GPS-IMU传感器组件 | [NovAtel SPN-IGM-A1]、[NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1]选其一 | [NovAtel SPN-IGM-A1][SPN-IGM-A1]、[NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1][IMU-IGM-A1] |
| GPS天线 | GPS NovAtelGPS-703-GGG-H | [高性能GNSS天线GPS703][GPS703] |
关键硬件名称 型号 产品主页
IPC Neousys Nuvo-5095GC 产品手册
CAN 卡 ESD CAN-PCIe/402 产品主页
GPS-IMU传感器组件 [NovAtel SPN-IGM-A1]、[NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1]选其一 NovAtel SPN-IGM-A1NovAtel SPAN® ProPak6™ and NovAtel IMU-IGM-A1
GPS天线 GPS NovAtelGPS-703-GGG-H 高性能GNSS天线GPS703

图片

![Foo](http://i.weather.com.cn/images/cn/life/2017/04/11/11141533DF572FBBA092E37E6E843C656C318272.jpg)

以上格式将生成标准的Html img标签展示该图:
Foo

代码

写作过程中免不了有代码片段的展示,想想之前怎么做的?粘贴一段代码,在word中,格式混乱,手足无措。最后放了一张代码截图。图片可以保留原始格式,但是不能复制文本内容是个遗憾。

代码的引用为格式化的代码提供了不少便利,不用再将其转化为图片。

反引号代码块

Markdown使用独占一行的反引号来包含多行代码,格式化不同的语言类型,只需要在反引号后面标注即可。

另一种形式的代码块,不同的是它使用三个反引号来包裹。之后以此标注代码语言类型,代码模块名称,链接地址,链接文本。

[title] [url] [link text]
代码片段

完整示例,语言cpp,指定了文件,代码模块名称,链接等:

modules/common/appllo_app.h APOLLO_MAIN宏定义apollo_app.h
#define APOLLO_MAIN(APP)                                       \
int main(int argc, char **argv) { \
google::InitGoogleLogging(argv[0]); \
google::ParseCommandLineFlags(&argc, &argv, true); \
signal(SIGINT, apollo::common::apollo_app_sigint_handler); \
APP apollo_app_; \
ros::init(argc, argv, apollo_app_.Name()); \
apollo_app_.Spin(); \
return 0; \
}

引用

使用符号>标识。

> 引言或者引用部分。

以上引言将展示如下:

引言或者引用部分。

提高篇:媲美任何格式化文字工具。

兼容HTML元素

如何你熟悉html,这个问题就简单很多。你可在md文件中插入任何html元素。

所以,图片的另外一种使用方式,就是直接插入html img标签:

<img src="http://i.weather.com.cn/images/cn/life/2017/04/11/11141533DF572FBBA092E37E6E843C656C318272.jpg">

延伸一下,为此图添加文字标注:

pretty apples


<p align="center">pretty apples</p>

流程图、时序图等

流程图(flow):

st=>start: Start
e=>end: End
op1=>operation: 分词|past
op2=>operation: 结果按等级返回|current
sub1=>subroutine: 细粒度切分
cond=>condition: 粒度划分?|approved
c2=>condition: 词频判断|rejected
io=>inputoutput: catch something...|request

st->op1(right)->cond
cond(yes, right)->c2
cond(no)->sub1(left)->op1
c2(yes)->io->e
c2(no)->op2->e

时序图:

Browser->Client:文档、段落、句子的拆分
Client->Service: 文档、段落、实时编辑的句子
Note right of Service: 基于词向量的整句概率检查
Service->Client: 概率由高到底,作为建议词组
Client->Browser:返回等级不同的检查结果

支持公式

leTax,支持原始公式可获取。

$$\\ P(w_1, …, w_T) = \prod_{t=1}^TP(w_t | w_1, … , w_{t-1})$$

右击公式可以获取到公式的原型leTax形式。

文档格式转换

markdown转换为Word、PDF等格式的文档。

上手尝试

到此为止,markdown你已经完全掌握。放心尝试一下,修改左侧的内容,将在右侧得到实时的渲染结果:

参考编辑工具

引用

使用的流程图、序列图、数学公式来自hexo博客开源插件,再次感谢:

script>