本文给出了Markdown实用的稍复杂语法,包括多级有序列表、代码插入方法、链接插入方法、图片大小、图片居中、文字颜色等,至于标题、加粗等基本语法本文不作介绍。
对Markdown设计思想的理解
写过HTML的童鞋都知道HTML标签丰富,能制作具有复杂格式的页面,但是纯手打HTML是很困难的,且HTML源文件可读性非常差。不信就在浏览器中打开一个网页然后右键->查看网页源代码,要找到正文内容基本得靠搜索功能(Ctrl + F)。
而Markdown的设计思想是在保证源文件易读性的基础上照顾易写性,即从Markdown源文件(代码)可以很方便地读正文内容,且可以容易地手工写Markdown源文件(代码)。这种目标决定了不能在Markdown中引入复杂的格式化标签,所以表现力上差一点,例如有序多级列表和文字颜色就不能通过Markdown直接控制。这也算是一种折中吧,毕竟有得必有失!
多级有序列表
Markdown支持多级无序列表,但不支持多级有序列表,所以只能通过曲线方式实现多级有序列表。
- 1. Title
- 1.1 Subtitle
- 1.2 Subtitle
- 1.2.1 Subsubtitle
- 1.2.2 Subsubtitle
- 1.3 Sbutitle
- 2. Title
- 1.1 Subtitle
- 1.2 Subtitle
- 1.2.1 Subsubtitle
- 1.2.2 Subsubtitle
- 1.3 Sbutitle
上述多级标题的Markdown源文件为:
* 1\. Title
+ 1.1 Subtitle
+ 1.2 Subtitle
- 1.2.1 Subsubtitle
- 1.2.2 Subsubtitle
+ 1.3 Sbutitle
* 2\. Title
+ 1.1 Subtitle
+ 1.2 Subtitle
- 1.2.1 Subsubtitle
- 1.2.2 Subsubtitle
+ 1.3 Sbutitle
注意无序列表嵌套中下一级列表比上一级缩进4个空格或一个Tab。
阻止自动有序列表
如果文中需要手动输入“1. text; [回车换行] 2. text; [回车换行] 3. text”这样的内容,需要在”.”前面加反斜杠”\”,例如1\. text
链接
(1) “点击我的博客”的第一种形式:
点击[我的博客](http://blog.youkuaiyun.com/write_down)
(2) “点击我的博客”的第二种形式:
点击[我的博客][1]
[1]: http://blog.youkuaiyun.com/write_down
插入图片及控制图片大小、居中
(1) 插入图片
图片插入与链接类似,但有两点区别:
- 第一个方括号前加叹号”!”
- 圆括号中的链接改为图片链接地址
(2) 控制图片大小和居中
放弃(1)插入方法,回到HTML语言吧。下图宽设置为400 pixels,高度设置为200 pixels,居中。
其实现是直接在Markdown源文件中插入如下HTML代码:
<center>
<img src="https://img-blog.youkuaiyun.com/20161015191651385" width=400 height=200 />
</center>
为了实现这个目的违背了Markdown的设计思想,真是有舍有得啊!
(3)相对路径插入图片
在本地用Markdown写文档时可能需要插入本地图片,所以需要相对路径插入图片。例如当前md文件的第一章图片graph1.jpg在同级pic目录下,则插入此图片的方法是:
。注意目录名和文件名不要有空格。
文字颜色及居中
只能回到HTML的标记,例如
这是一段居中的红色文字
直接在Markdown源文件中插入如下HTML代码
<center>
<font color = "red" align = "center">这是一段居中的红色文字</font>
</center>
为了实现这个目的也违背了Markdown的设计思想,有舍有得啊!
代码
(1) 使用“`区块
class SchoolMember:
"""Represents any school member"""
def __init__(self, name, age):
self.name = name
self.age = age
print('(Initialized SchoolMember: %s)' %self.name)
def tell(self):
"""Tell my details."""
print('Nme: "%s" Age: "%s"' %(self.name, self.age))
上述Python代码的markdown源文件:
```python
class SchoolMember:
"""Represents any school member"""
def __init__(self, name, age):
self.name = name
self.age = age
print('(Initialized SchoolMember: %s)' %self.name)
def tell(self):
"""Tell my details."""
print('Nme: "%s" Age: "%s"' %(self.name, self.age))
```
注意在第一个“`后面加上语言名称,markdown支持的语言有:actionscript, apache, bash, clojure, cmake, coffeescript, cpp, cs, css, d, delphi, django, erlang, go, haskell, html, http, ini, java, javascript, json, lisp, lua, markdown, matlab, nginx, objectivec, perl, php, python, r, ruby, scala, smalltalk, sql, tex, vbscript, xml。
(2) 空格/Tab
若每行行文字前有4个空格或Tab,Markdown将其解析为代码,但可能造成语言类型无法识别。
(3) 行内代码
这是一个行内代码def __init__(self, name, age):
, 其Markdown源文件为:
这是一个行内代码`def __init__(self, name, age):`
分隔符
(1) ##插入横线##
实现华丽丽的分割线的方法就是在新的一行输入---
。
(2) ##插空格或TAB##
空格: 
TAB:
参考文献: