Markdown-Tips

很早之前就想总结一下Markdown的一些语法了,记得刚开始学的时候随便搜一下就能找到很多人总结的文章,胡乱地看了一通结果到自己真正写的时候还是一个一个语法地搜,虽然Typora用着很舒服但用久了之后却发现自己的Markdown水平依旧没有任何长进,一离开Typora的帮助,比如换了个环境(学校电脑,没权限安装Typora)还是得一个个查。
于是开始逼自己用更泛用的工具写BLog,正好前些日子在学Vim,逐渐体会到其强大之处,干脆就用它写Markdown文章好了,配合MarkdownPreview插件,也觉得挺方便的。(重点是能够自定义快捷键) 下面就按照常用的程度记录下Markdown的一些语法吧,方便自己以后查询,看自己曾经写的总比看别人写的印象深~

1 最基础的语法

# h1级标题
## h2级标题
### h3级标题
#### h4级标题
##### h5级标题
###### h6级标题

文章的层次得要有的吧,平常写东西前三级就够用了,注意#和标题之间要有空格,而且要放在行头,像# 这种写法是不会被认作标题的。
这个语法太简单了怎么都不会忘的吧,但为了完整起见还是列在这。
标题可以用等号和连字符表示:

This is an H1
=============

This is an H2
-------------

有时候你可能只是想打一个分隔线,但由于少空了一行导致前一行成了一个二级标题。这里的=和-任意个数都可以,关键是位置;上面的范例在真正写作的时候是不应该出现的(除非你太闲了想多打几个=玩)。

2 很常用的语法(对于我来说)

由于每个人使用Markdown的需求不同,常使用的语法可能相差很大。有的人可能主要用来写小说、日记,这时候其实用的语法并不多;有的可能写代码比较多,或者是写LaTeX的公式较多;甚至是使用表格更多(我觉得Markdown里的表格还是挺麻烦的,而且也不太好控制格式)。
我由于是流体力学专业,公式是肯定不会少的,但代码平常也用得很多,下面就从我的需求出发列一下我常用的语法。

2.1 代码

普通的行内引用: `your code` ;代码块:```  ``` 其中三个斜点要单独占一行,第一个```后可标注该代码语言名称,一般比较常用的语言都可以识别出来。
好像代码块还有别的表示方式如~~~、4个空格或者1个水平制表符,但有的可能显示不出来我也不知道是不是编译器的原因。

2.2 空格

这应该是最让Markdown新手抓狂的一个语法了,当我想拉开两个词的距离而多次按下<Space>时却发现,只有最开始那个空格是有效的,然后你打开百度搜索发现原来Markdown里面有这么多种空格的表达方式。我觉得最多记住一个就够了,比如我偶尔用下&emsp;,但输入太过麻烦后面一想也基本没必要用,除非你有强迫症想让每段开头都空两个字符;或者直接在Vim加一个快捷键方便打空格。

2.3 段落

毫无疑问这是第二个让新手不得不Google一下的地方,当你按下<Enter>想换个行或者多空几行时,却发现并不奏效。
Markdown 段落没有特殊的格式,直接编写文字就好,段落的换行是使用两个以上空格加上回车
空行 : 也有很多种方法,推荐只记住<br>或者<br/></br>这几个都行,这也是HTML的表示方法。(感觉空行还是挺常用的)

2.4 字体

首先是斜体和粗体:

*斜体文本*
_斜体文本_
**粗体文本**
__粗体文本__

假如要输入一段粗体中包含斜体的文本 ,如果全部用*可能就容易出错,而混搭起来层次比较清晰——本来是这么想的,但好像有时候嵌套会出现问题:

  • 斜体外套粗体:**a_b_c** **a*b*c** __a*b*c__ __a_b_c__
    显示结果如下:a_b_c abc abc a_b_c  结果倒挺让我意外的。
  • 粗体外加斜体:_a**b**c_ *a**b**c* *a__b__c* _a__b__c_
    显示结果如下:_abc_ abc a__b__c _a__b__c_
    总结这几个测试可以得出,*的优先度是大于_的,*内部的_将失去_原有的作用; 而且在_里面的_也会失去作用。
  • 代码符号`的优先度又比*高,所以其内部的文字格式通过*控制不了。

需要强调的是不同的Markdown引擎对于这些细节的处理是不一样的,我的主题用的是hexo自带的hexo-renderer-marked,当换成其他引擎如hexo-renderer-markdown-it、hexo-renderer-kramed时结果可能会不一样

2.5 分隔线

|  ***
|  * * *
| ******
| - - -
| ---
| ___
|   《hr》

忽略前面的|(分隔线在我Blog的编译器里优先度比代码快还高,不加|根本显示不出来),而hr标签则更高,不改成中文符号根本没法显示。 (别的编译器可能显示结果又不一样)
随便用哪个都行,推荐---,因为不需要按Shift键,比较方便。

2.6 删除、下划线

删除:~~delete~~
下划:<u>underline</u>这个复杂一点,是HTML标签
测试时间到

  • 与加粗的比较:
    • 加粗在外部: __a~~b~~c__ __a<u>b</u>c__
      正常显示: abc abc
    • 加粗在内部:~~a__b__c~~ <u>a__b__c</u>
      加粗在内部: a__b__c a__b__c
  • 删除与下划并存:~~a<u>b</u>c~~ <u>a~~b~~c</u>
    显示结果 : abc abc
  • 其他测试均未出现问题所以不用列出来了

如果把__换成**则均能正常显示,结合前面的可以得出的结论:
加粗和斜体只记住*就行了,忘记_吧!
当然这些结论也只适用于hexo-renderer-marked引擎(真希望有朝一日Markdown能有一个统一的完整的引擎)

2.7 链接和图片

2.7.1 链接

[名称](地址 "title")
<地址>          :直接写一个网址上去也能识别为可点击的链接
[名称][链接名称]
[链接名称]: 地址

若要使用第三种方法,两行之间至少要空一行才能正常显示。注意使用链接时地址一定要写完整,前面的http://不要丢了,不然会按照相对地址进行跳转。
链接还可以加个title,在地址后用引号的形式写上就行;当把鼠标移到链接上时就会显示title了。
举个例子:
Airfoil optimisation for vertical‐axis wind turbines with variable pitch

2.7.2 图片

和链接极为相似,只是前面多了个!号,注意是英文的感叹号。第一个框里面的名称基本上空着就行,或者简单写个描述,防止哪天图片挂了之后忘记当初这张图是啥样的。
当然也可以用HTML标签来表示图片,还能加上更多的格式控制,不过显得比较麻烦

<img src="图片网址">

说到图片肯定离不开图床,毕竟图片太多的时候总不能全往一个地方塞。这里推荐PicGo这款软件,Windows和Linux下都能用,添加图片也很方便,看看它总结的一些图床吧:

我还是白嫖的Github当作图床,不过缺点是有时候国内访问速度很慢甚至打不开(对我来说没影响就行),不过好像还有免费的CDN加速可以用
同样图片也可以加一个title,鼠标移上去的时候会显示出来。像我这个Hexo主题还会在下方显示一行图注。

2.8 列表

- a
+ b
* c

这三种都可以表示无序列表,还是推荐使用-,因为按键最简单;注意要留一个空格

1. a
2. b
3. c

有序列表也很简单,也是注意要留一个空格
然后是列表的嵌套,说是添加四个空格,不过有的好像只加了两个就能够显示出来。
注意一个使用细节:列表的最后一行和下一段文字之间一定要先空一行再说,不然文章的层次会出现问题。总之没事多空一行没坏处~

2.9 引用

2.9.1 区块引用

有时候想引用一下某人的名言警句,放弃难看的“ ”直接另起一行使用>吧。而且这个也能嵌套(不知道这里嵌套有什么用):

> a
> > b
> > > c
  • 注意在>最好加上空格,虽然实际情况是不加空格有的编译器也能显示出来,但加空格总不会出错
  • 第一行用了>相当于创了个引用块,接下来的内容都会被当作引用,直到遇见一个空行

2.9.2 脚注引用

这又是一个让人蛋疼的地方,
脚注引用这部分并不在markdown的基本语法里,所以有的引擎比如我这个hexo默认的hexo-renderer-marked就没办法直接显示脚注。为了能够用脚注我折腾了一个下午,引擎换来换去,解决一个个新冒出来的问题,最后还是放弃了,换回了原来的hexo-renderer-marked。
好在最后找到了这个hexo-reference插件,只需要一个命令:

sudo npm install hexo-reference --save

再在根目录的_config.yml中加入:

Plugins:
  - hexo-reference

就能够使用脚注了!使用方法:

举个例子:Rogalsky[1]
更高端一点,可以在脚注内容里面加上链接,点击直接进入文献相关页面:De Tavernier[2]
用户体验极佳~

2.10 公式

首先得要有公式的引擎,毕竟公式这么复杂的东西Markdown自己很难搞定吧。一般推荐用MathJax引擎,配置好了之后可以用LaTeX语法写公式了~

2.10.1 行间公式

$a_1+a_2$ : 显示为 $a_1+a_2$

2.10.2 独立公式

$$\frac{\partial \rho}{\partial t}+\nabla \cdot(\rho \mathbf{v})=0 \tag{1.1}$$
显示为:
$$\frac{\partial \rho}{\partial t}+\nabla \cdot(\rho \mathbf{v})=0 \tag{1.1}$$
注意要另起一行开始再开始输入$$才有效。如果想要给公式加序号,在公式输完了后空个格加入\tag{1.1}就行,这种方式是手动编号
加入编号是为了引用,引用也只能手动输入$(1.1)$,显示为$(1.1)$。还是比较麻烦的。

2.10.3 LaTeX的自动编号公式

对于公式的处理又是Markdown里的一大难题,下面这一段LaTeX语句可能放在别的引擎里就识别不出来了。

$$\begin{equation}
x^n+y^n=z^n
\end{equation}$$

显示为:

$$\begin{equation}
x^n+y^n=z^n
\end{equation}$$
当然这些规则都可以通过Mathjax的配置进行修改,比如有的blog的mathjax配置段没有:

TeX: {equationNumbers: { autoNumber: "AMS" } }

自然就不会显示自动编号。关于公式的具体语法,实在是太复杂了,不是一下子能说的清楚的;不过世界上也有大佬能够在课堂上用Markdown写公式做笔记,详见How I'm able to take notes in mathematics lectures using LaTeX and Vim。实在是太强了...

3 其他语法

3.1 表格

我是不太建议用表格的,毕竟Markdown里表格的输入并不方便,特别是比较复杂的表格,光是|都够你输入了,当然如果是有像Typora这样的工具的话,表格输入还是方便了不少,但Markdown无法对表格进行一些比较高级的控制,如合并单元格。

| 左对齐 | 右对齐 | 居中对齐 |
| :-----| ----: | :----: |
| 单元格 | 单元格 | 单元格 |
| 单元格 | 单元格 | 单元格 |

3.2 转义/ HTML等

\反斜线转义字符用来显示特定的符号,这个用法在一些程序语言里非常常见。
另外Markdown还支持许多HTML元素的显示,但不是特殊情况一般不用,毕竟是用来方便我们写作的,没必要搞些特别复杂的东西,要求太高的话出门右拐LaTeX左拐Word欢迎你。

Author: zcp
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source zcp !
 Previous
python爬虫入门练习——Sourceforge自动下载
1 明确需求SourceForge与Github类似,是一套合作式软件开发管理系统,上面有大量的开源项目——这是Wiki百科的描述。然而在我的印象里,它只是个广告一堆下载速度贼慢找半天找不到下载链接在哪的网站;以前在它上面下载过几
Next 
Linux/Windows使用记录
1 Ubuntu出现U盘能识别但打不开这个问题困扰了我很久,不知道是什么原因造成的,网上给出的大多数解决方案也都行不通,而且有时候重启下又可以正常打开了,不知道电脑是哪里抽风。 1.1 问题描述插入U盘后在桌面不显示
2019-11-22
  TOC