Markdown使用指南

Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Gruber)。它允许人们“使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档”。这种语言吸收了很多在电子邮件中已有的纯文本标记的特性。本文主要介绍目前各种Markdown编辑器平台的优缺点,以及一些常用Markdown语言。

I. Markdown复制粘贴插件

  • Markdown, Please! 是一款能够将任意网页转换为 MarkDown 格式的在线服务,利用浏览器小书签,只需要点一下转换按钮即可获得 MarkDown 格式的网页内容。
  • 拷贝为Markdown - Google Chrome:将你在页面中选中的HTML格式转化为Markdown格式。

II. Markdown编辑器

国产 Markdown 软件的数量虽然不多,但质量都很高,比如 MWebMarkEditor,也已有着各自的稳定用户群。Ulysses 的付费策略似乎让大家很不爽,网络上又开始聊起了「有哪些好用的 Markdown 工具」的话题。

II.I. Markdown在线编辑器

大体语法一致,有些功能不支持。推荐使用作业部落 Cmd Markdown有道云笔记

II.II. Markdown离线编辑器

Windows离线编辑器则推荐使用atom(配合GIT BLOG使用)和CuteMarkEd

II.II.I. Atom

  1. 下载atom,并安装 Visual Studio
  2. 呼出Panel对话框(Ctrl + Shift + P),跟Sublime Text是一样的。
  3. 打开settings界面,点击左侧栏的Install按钮。然后在搜索框中输入关键字点击packages开始搜索,点击安装即可。
  4. 重启ATOM

如果由于墙内原因,无法顺利安装。就需要进行离线安装packages

  1. 到对应的github仓库下载压缩文件解压
  2. 运行CMD,CD到对应文件夹
  3. 运行npm install,不要用apm install,重启。

常用插件可以参考:Atom:优雅迷人的编辑神器Atom 有什么优秀插件

这里推荐以下几种:

其他可选插件:

  • git-control,包括了比较,提交,撤销,获取,拉取,推送,合并,分支,版本发布等。
  • language-markdown:提供 Github Flavored Markdown 等 MD 高亮支持
  • markdown-scroll-sync:将内置插件 markdown-preview 的编辑区和预览区同步滚动。
  • Markdown Preview Plus,支持显示latex公式。
  • tool-bar-markdown-writer,提供markdown写作工具栏,替代输入指令,必须先安装tool-barmarkdown-writer packages
  • markdown-table-formatter,格式化表格
  • atom-pandoc-convert
  • markdown-pdf,输出为PDF文件。在Markdown Preview Plus环境中无法使用,需要markdown-preview atom package
  • markdown-themeable-pdf,输出为PDF文件,公式不支持打印。遇到不能转换PDF时,打开cmd,执行 npm install phantomjs-prebuilt,看到Done. Phantomjs binary available at C:\Users\wxl\node_modules\phantomjs-prebuilt\lib\phantom\bin\phantomjs.exe,重启atom。点击右键选择Markdown to PDF,即可。

II.II.II. Sublime text

  1. 安装Package Control、安装Sublime text
  2. 安装插件。Sublime Text 2安装插件方法详解。在 Sublime Text 中,按 Ctrl+Shift+P 呼出 Command Palette 然后找到 Package Control: Install Package,输入名称搜索即可。

推荐插件:

  • markdown preview。默认没有快捷键,如下方式设置快捷键:在Preferences -> Key Bindings User打开的文件的中括号中添加以下代码: { "keys": ["alt+m"], "command": "markdown_preview", "args": { "target": "browser"} }
  • Markmon实时预览(本地安装地址
  • 下载 node,启动CMD,node -vnpm -v 测试安装。输入 npm install -g markmon 安装 markmon (npm)。参考 node 和 npm 安装使用
  • 安装 pandoc,实时监控文件编辑,以便实时预览。
  • 配置:Preferences->Package Settings->Markmon->Settings - User,编辑文件如下:{ "executable": "markmon.cmd", }
  • 重启 Sublime
  • 通过菜单 Tools > markmo > Launch,或者 Control+Shift+P:Markmon launch。在浏览器会打开 localhost:3000 页面,对于 Sublime 中的改变,你就会在浏览器中实时看到。Sublime 切换文件的同时,浏览器也会自动跟随切换,方便。

III. Markdown语法

常用的Markdown语法可以查看Cmd Markdown 编辑阅读器

III.I. 数学公式

Mathjax与LaTex公式简介math.stackexchange.com上名为MathJax basic tutorial and quick reference的问题翻译而来,并有所改动。主要讲述了如何使用MathJax和相关的Latex语法。

编辑TEX公式的详细内容可以点击查看Latex公式使用技巧Cmd Markdown 公式指导手册markdown编辑器使用LaTex数学公式

III.I.I. MathJax渲染器

MathJax是一款运行在浏览器中的开源的数学符号渲染引擎,使用MathJax可以方便的在浏览器中显示数学公式,不需要使用图片。目前,MathJax可以解析Latex、MathML和ASCIIMathML的标记语言。著名的Stackoverflow网站上的漂亮公式,就是使用了MathJax插件的效果。添加MathJax插件也非常简单,只需要在markdown文件中,添加MathJax CDN,就可以在md文件中插入Tex格式的公式了。

1
2
3
<script type="text/javascript"
src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

行间公式的形式为

1
$$ 此处插入公式 $$

行内公式的形式为

1
\\( 此处插入公式 \\)

III.I.II. Markdown Pad显示数学公式

之前的博文有推荐Markdown Pad 2作为Window下的Markdown编辑器。如果你是使用该软件作为markdown的编辑器,你只需要在软件的Tools-> Options-> Advanced-> HTML Head Editor中添加上述的MathJax CDN即可。这样你就不必每次都在md文件中重复添加了。

III.I.III. Atom中显示数学公式

点击查看Atom的安装和使用。实测在Atom实时渲染视图下,倘若使用\ref等标签可能无法正常显示公式,但是只要公式编写正确,在其他网站,如在线Latex编辑器测试通过,那么就不必担心,猜测可能是markdown-preview-plus或者Atom的bug。另外,如果是通过apm安装的package,卸载时需要通过apm uninstall {package_name}或者rm -rf .apm/{package_name}/,通过GUI界面卸载可能会出现问题。

III.I.III.I. Markdown Preview Plus插件

Markdown Preview Plus插件支持显示latex公式。

  • Search for and install markdown-preview-plus in Atom's Settings view.
  • Search for and disable the built-in package markdown-preview.
  • (Optional) Install and enable Pandoc.
  • Toggle Preview: ctrl-shift-m
  • Toggle Math Rendering: ctrl-shift-x。Math Rendering Settings 可以指定两种不同parser:MathJax和Pandoc。Pandoc,堪称文档转换的瑞士军刀。勾选markdown-preview-plus/Settins/Enable Pandoc Parser,然后在Pandoc Options: Path输入pandoc的路径,如*nix系统可通过which pandoc获取。如果想获取公式渲染后的页面,那么在普通markdown渲染的基础上,还需要键入Ctrl+Shift+X以完成公式的渲染。

III.I.III.II. Markdown-preview-enhanced插件

Markdown-preview-enhanced,包含markdown-scroll-sync插件,自动显示latex公式,可以输出公式格式。建议使用。安装后在设置面板使用Pandoc parser。

III.I.IV. Hexo中显示数学公式

Markdown本身没有支持Latex,hexo先用marked.js渲染,然后再交给MathJax渲染。

在默认hexo-renderer-marked环境下,在marked.js渲染的时候下划线_是被escape掉并且换成了<em>标签,即斜体字,另外LaTeX中的\\也会被转义成一个\,这样会导致MathJax渲染时不认为它是一个换行符了。所以这个错误是由Markdown渲染器引起的。

我们要做的是怎样解决 MarkdownMathjax 的一些冲突的问题,接下来介绍一些常用的方法。

III.I.IV.I. 选择渲染器

推荐使用pandoc渲染器

第一种方法:手动修改转义符。

这个方法最直接,需要转义我就转义。比如我需要在公式中写下标符号,那就修改写法写为: $x\_i$;需要换行就使用\\\\。 很明显,这种方式虽然可以解决问题,但通用性很差,比如想迁移到其它地方,就无法识别了,因为大部分的markdown引擎是没有这个问题的。

文章让Hexo在使用Mathjax时支持多行公式提到如何解决这一问题:将换行符\\改写成\\\\

第二种方法:修改渲染源码。

具体思路参考了使Marked.js与MathJax共存,其他本地修改策略可以查看在 Hexo 中完美使用 Mathjax 输出数学公式,打开hexo的markdown引擎渲染源码nodes_modules/marked/lib/marked.js,进行如下修改(未测试)。这种方式指标不治本,因为保证不了还可能有其它的字符会冲突。

第一步: 找到下面的代码,去掉\\的转义了。

1
2
3
escape: /^\\([\\`*{}\[\]()# +\-.!_>])/,
改为:
escape: /^\\([`*{}\[\]()# +\-.!_>])/,

第二步: 找到em的符号: 去掉_的斜体含义,markdown中有*也可以表示斜体,这样就解决了。

1
2
3
4
5
6
7
em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
修改为
em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,

em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
修改为
em: /^\*(?=\S)([\s\S]*?\S)\*(?!\*)/

第三种方法:使用其他渲染器插件。

  • Rawblock插件(未测试)

issue #524 中,有人提到了可以使用 rawblock 来解决,可是每次要写公式都得在公式前后加上 rawblock 来声明实在太烦了,对于公式大户来说简直要崩溃。

  • Hexo-math插件

利用MathJax来渲染LaTeX数学公式,首先通过安装Hexo-math插件,然后手动修改marked.js与MathJax并存,之后重新生成和部署网站即可。Gitlab方案无法执行,本地HEXO未测试。

1
npm install hexo-math --save
  • Hexo-renderer-markdown-it插件

为hexo添加上标、下标、脚注等功能中使用 hexo-renderer-markdown-it 进行渲染,先卸载Hexo自带的Markdown解析器 hexo-renderer-marked,再安装 hexo-renderer-markdown-it 就可以了。安装完以后,先 hexo clean && hexo g 重新生成静态网页,然后 hexo s 查看,这回公式能正常显示了。

1
2
npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-markdown-it --save

但是使用 hexo-renderer-markdown-it 渲染之后,原本为Markdown编写的TOC里的链接都失效了,侧边栏的快速导航链接也失效了,也不支持NexT的<!–more–>标签 。本地hexo推送可以参考使用hexo-markdown-it导致文章目录失效的解决方案

  • Hexo-renderer-kramed插件(未测试)

Hexo-renderer-kramed插件fork了 hexo-renderer-marked 项目,并且只针对MathJax支持进行了改进。卸载 hexo-renderer-marked(注意,如果你使用了其他的渲染插件,请卸载对应的插件),然后安装 hexo-renderer-kramed。这下,不仅能正常使用TOC,也能完美地支持MathJax渲染了。至此,问题得到了解决。

1
2
npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save

关于行内代码,确实还存在一点问题。因为kramed只是提高了LaTeX公式渲染的优先级,使类似 'formula'的语法不会被Markdown引擎替换,从而可以正确的被渲染成LaTeX公式。也就是说,对于kramed而言,出现 ' 符以后的两个 $ 符之间的部分才会被kramed认为是行内公式。要解决这个问题需要修改kramed的渲染机制。

  • hexo-renderer-pandoc插件(推荐)

Hexo 默认的渲染器为 marked (hexo-renderer-marked) 渲染器,该渲染器仅支持 md 的基本规范。感兴趣的朋友也不妨去hexo-renderer-pandoc主页看看。Pandoc也可以实现在gitlab自动部署,查看.gitlab-ci.yml文件设置。

本地hexo博客的搭建:

  1. 首先需安装 pandoc 软件。
  2. 然后卸载Hexo自带的Markdown解析器 hexo-renderer-marked,再安装 hexo-renderer-pandoc 就可以了。

    1
    2
    npm un hexo-renderer-marked --save
    npm install hexo-renderer-pandoc --save

由于hexo-renderer-pandoc更新加入了template设置,需要在站点配置文件~/blog/_config.yml中加入默认配置(issues)。

考虑到图片块解析错误,建议添加-implicit_figures选项。

1
2
3
4
5
6
7
8
pandoc:
filters:
extra:
template:
meta:
mathEngine:
extensions:
- '-implicit_figures'

III.I.IV.II. 配置MathJax

Hexo内置的Mathjax开启方式:

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
# Math Equations Render Support
math:
enable: false

# Default(true) will load mathjax/katex script on demand
# That is it only render those page who has 'mathjax: true' in Front Matter.
# If you set it to false, it will load mathjax/katex srcipt EVERY PAGE.
per_page: true

engine: mathjax
#engine: katex

# hexo-rendering-pandoc (or hexo-renderer-kramed) needed to full MathJax support.
mathjax:
# Use 2.7.1 as default, jsdelivr as default CDN, works everywhere even in China
cdn: //cdn.jsdelivr.net/npm/mathjax@2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML
# For newMathJax CDN (cdnjs.cloudflare.com) with fallback to oldMathJax (cdn.mathjax.org).
#cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML
# For direct link to MathJax.js with CloudFlare CDN (cdnjs.cloudflare.com).
#cdn: //cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML

# hexo-renderer-markdown-it-plus (or hexo-renderer-markdown-it with markdown-it-katex plugin)
# needed to full Katex support.
katex:
# Use 0.7.1 as default, jsdelivr as default CDN, works everywhere even in China
cdn: //cdn.jsdelivr.net/npm/katex@0.7.1/dist/katex.min.css
# CDNJS, provided by cloudflare, maybe the best CDN, but not works in China
#cdn: //cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css

如果在 Next 低版本中Mathjax开启后还是无法显示公式,尝试更改主题配置文件~/blog/themes/next/_config.yml中 CDN 地址,相关issues

如果上述配置成功,不必修改以下。

如果CDN还是失效,可以尝试进行如下修改。

NexT 主题私人定制遵照 Loading and Configuring MathJax 的指引,修改MathJax为纯 JavaScript 代码。对于整个博客网站,只需要载入一次,任何页面都不需要重复载入。

  1. /themes/next/source/js中添加文件custom.js,在custom.js中添加

    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
    //MathJax
    window.MathJax = {
    AuthorInit: function () {
    MathJax.Hub.Register.StartupHook("Begin",function () {
    MathJax.Hub.Queue(function() {
    var all = MathJax.Hub.getAllJax(), i;
    for (i=0; i < all.length; i += 1) {
    all[i].SourceElement().parentNode.className += ' has-jax';
    }
    });
    });
    }
    };

    window.MathJax = {
    tex2jax: {
    inlineMath: [ ['$','$'], ["\\(","\\)"] ],
    processEscapes: true,
    skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
    }
    };


    // <script type="text/javascript" src="//cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
    // jQuery
    $.getScript('https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML', function()
    {
    // script is now loaded and executed.
    // put your dependent JS here.
    });
  2. 然后在文件/layout/_layout.swig/body前加入以下代码。为了避免首页MathJax加载出错,配合判断条件page.comments使用(需要显示公式的文章一定要设置comments: true)。

    1
    2
    3
    //{% if page.comments %}
    <script type="text/javascript" src="/js/custom.js"></script>
    //{% endif %}

III.I.IV.III. 公式测试

Bug 提醒hexo issues/2064 提到了 连续两个花括号的问题,即两个连续 { {会提示渲染错误Template render error: (unknown path) expected variable end

1
2
$EI=\{{EI}_1,{EI}_2,\cdots,{EI}_V\}$
1+e^{{\mathbf{v}_{w_j}^{'}}^{T}}`

目前暂时解决办法是

  1. 采用\lbrace\rbrace替换原先的{}
  2. 两个{中间加个空格:$\mathrm{cov}_{t_{b}}^{ {}}\left( S(t_{c}),F(t_{c})\right)$,其中空上标 ^{ {}} 无效果,应该改成 ^{\,}。或者使用使用 \ 保留外层花括号:$EI=\{ {EI}_1,{EI}_2,\cdots,{EI}_V\}$

行内公式:测试正常。

1
2
行内公式: $R{m \times n} = U{m \times m} S{m \times n} V{n \times n}’$,$d_{1}=\frac{\ln(S_{t}/K)  +(r+\sigma^{2}/2)(T-t)}{\sigma\sqrt{T-t}}$。This is an example for $x_mu$ and $y_mu$. This is an example for $x_{mu}$ and $y_{mu}$.
This is an example for $x\_mu$ and $y\_mu$.

行内公式测试: \(R{m \times n} = U{m \times m} S{m \times n} V{n \times n}’\)\(d_{1}=\frac{\ln(S_{t}/K) +(r+\sigma^{2}/2)(T-t)}{\sigma\sqrt{T-t}}\)。This is an example for \(x_mu\) and \(y_mu\). This is an example for \(x_{mu}\) and \(y_{mu}\).

行间公式:测试正常。一个$ $公式为行内公式,显示不居中。二个$$ $$公式为行间公式,显示居中。加入转义符就是转义符意思。

1
2
$T(n) = \Theta(n)$
$$T(n) = \Theta(n)$$

\(T(n) = \Theta(n)\)

\[T(n) = \Theta(n)\]

1
2
$$R{m \times n} = U{m \times m} S{m \times n} V{n \times n}’$$
$$R_{m \times n} = U_{m \times m} S_{m \times n} V_{n \times n}'$$

\[R{m \times n} = U{m \times m} S{m \times n} V{n \times n}’\] \[R_{m \times n} = U_{m \times m} S_{m \times n} V_{n \times n}'\]

1
2
3
4
$$d_{1}=\frac{\ln(S_{t}/K)  +(r+\sigma^{2}/2)(T-t)}{\sigma\sqrt{T-t}}$$

加markdown转义字符:
$$d\_{1}=\frac{\ln(S\_{t}/K) +(r+\sigma^{2}/2)(T-t)}{\sigma\sqrt{T-t}}$$

\[d_{1}=\frac{\ln(S_{t}/K) +(r+\sigma^{2}/2)(T-t)}{\sigma\sqrt{T-t}}\]

\[d\_{1}=\frac{\ln(S\_{t}/K) +(r+\sigma^{2}/2)(T-t)}{\sigma\sqrt{T-t}}\]

1
2
3
$$T(n) = \Theta(n) + \sum{i=0}^{n-1}{O({n}{i}^2)}$$
$$T(n) = \Theta(n) + \sum_{i=0}^{n-1}{O({n}_{i}^2)}$$
$$T(n) = \Theta(n) + \sum\_{i=0}^{n-1}{O({n}\_{i}^2)}$$

\[T(n) = \Theta(n) + \sum{i=0}^{n-1}{O({n}{i}^2)}\] \[T(n) = \Theta(n) + \sum_{i=0}^{n-1}{O({n}_{i}^2)}\] \[T(n) = \Theta(n) + \sum\_{i=0}^{n-1}{O({n}\_{i}^2)}\]

麦克斯韦方程组查看LaTeX效果:测试正常。

1
2
3
4
5
6
7
8
$$
\begin{eqnarray}
\nabla\cdot\vec{E} &=& \frac{\rho}{\epsilon_0} \\
\nabla\cdot\vec{B} &=& 0 \\
\nabla\times\vec{E} &=& -\frac{\partial B}{\partial t} \\
\nabla\times\vec{B} &=& \mu_0\left(\vec{J}+\epsilon_0\frac{\partial E}{\partial t} \right)
\end{eqnarray}
$$

\[ \begin{eqnarray} \nabla\cdot\vec{E} &=& \frac{\rho}{\epsilon_0} \\ \nabla\cdot\vec{B} &=& 0 \\ \nabla\times\vec{E} &=& -\frac{\partial B}{\partial t} \\ \nabla\times\vec{B} &=& \mu_0\left(\vec{J}+\epsilon_0\frac{\partial E}{\partial t} \right) \end{eqnarray} \]

III.II. 交叉引用

在HEXO中使用交叉引用,you only need learning how to install Haskell package。

未测试

  • hexo-renderer-pandoc. But there seems some confusion in its readme.md, and you could investigate more deeply by blog.
  • pandoc. You just need to install it if you only use hexo-renderer-pandoc.
  • pandoc-citeproc. You just need to install it if you only use hexo-renderer-pandoc.
  • pandoc-crossref. And its syntax usage when writing your markdown.
  1. Do not use Haskell within windows operation system;
  2. Do not mess up the order of the filters, i.e. pandoc-crossref and pandoc-citeproc, as well as --bibliography. At least when use pandoc in shell, if you mess up the order of them, it won't work as you expect. ( refer to: pandoc, multiple filter)

III.III. 列表排列

Markdown在使用有序列表和无序列表的时候,如果中间插入其他内容(甚至是子层级的内容),有序列表的自动编码功能以及无序代码的层级功能会遇到问题。解决方法是,有点类似于编程中,通过缩进对齐的方式(通过Tab键),最外层同级别的不需要缩进,然后下一级的都缩进一次(点一次Tab),然后如果还继续细分下一层,那么输入的时候就缩进两次。

第一次测试:(Tab键以[Tab]展示,空格以[空格]展示)

1
2
3
4
5
6
7
8
1.[空格]测试文字1
[Tab]-[空格]测试文字1-1
[Tab]-[空格]测试文字1-2
2.[空格]测试文字2
[Tab]-[空格]测试文字2-1
[Tab][Tab]-[空格]测试文字2-1-1
[Tab][Tab]-[空格]测试文字2-1-2
[Tab]-[空格]测试文字2-2

III.IV. 页面跳转

定义一个锚,其中id="jump_label"是自己设定的该位置标记,可以随意修改。推荐使用div标签实现跳转。

1
2
3
<div id="jump_label"></div>

<span id="jump_label">text</span>
  • 页内跳转

将定义好的位置标记放到要跳转到的地方,Hexo主题不支持内嵌图标显示。

1
2
[这句话是想要跳转到footer处的锚点链接,点击即会跳转](#jump_label)
[<i class="icon-home"></i>](#jump_label)
  • 页间跳转

最直接的方法,jekyll主题博客点击目录标签,复制地址栏地址即可。hexo主题博客需要在目录标签处右键复制链接即可。但是如果存在中文内容,该方法不好看。推荐使用自定义标签方法。

首先,先定义一个锚,然后添加跳转到的页面的链接,再加/#jump_label

1
[现在点击此链接,可实现页间跳转](http://blog.csdn.net/thither_shore/article/details/52185758/#jump_label)

III.V. Emoji

1
2
3
:camel:
:blush:
:smile:

III.VI. 脚注

脚注是在需要标记脚注文字的后面增加一个方括号,方括号中的内容必须以 ^ 开头,再接着是数字、字符串标记:

1
Footnotes[^1] have a label[^label] and a definition[^2].

Footnotes1 have a label2 and a definition3.

接着,在文件的任意地方,你可以把这个脚注的内容定义出来:

1
2
3
[^1]: This is a footnote
[^label]: A footnote on "label"
[^2]: The definition of a footnote.

脚注内容定义的形式就是前面引用脚注的内容,接着一个冒号,再接着一个以上的空格或制表符,最后是脚注定义的内容。

A footnote definition may contain multiple lines, paragraphs, code blocks, blockquotes and most any other markdown syntax. The additional line simply must be indented at least an additional four spaces. 脚注定义的内容可以包含多行、段落、代码区块、区块引用和大多数其他 markdown 格式的内容。对于多行的内容只需要简单缩进至少4个空格。

1
2
3
4
5
6
7
8
9
10
[^1]: The first paragraph of the definition.

Paragraph two of the definition.

> A blockquote with
> multiple lines.

a code block

A final paragraph.

By default, the footnote definitions are placed at the end of the resulting HTML document. However, you may want the footnotes in another location within the document. Simply place the following text at that location within your markdown document.

默认情况下,脚注内容位于生成的 HTML 文档末尾。但是,你也许想将脚注内容放在文档的其他位置。只需要将如下内容放在需要的 markdown 文档位置即可。

1
///Footnotes Go Here///

III.VI.I. Hexo显示脚注

关于脚注的支持,hexo-footnotes,脚注要人工编号,也不支持 inline 脚注。 Markdown-it 对脚注等支持体验不佳,不仅需要改变渲染器,并且配置复杂,此外还需要 markdown-it-footnote 插件。

  1. 第一种方法,hexo-reference插件,这个插件默认使用的是一个 CDN 的CSS,我给改成本地的了,需要修改的是node_modules/hexo-reference/index.js测试后该插件版式异常,不要使用

    1
    npm install hexo-reference --save
    1
    2
    3
    4
    5
    6
    7
    // Add CDN CSS resources
    hexo.extend.filter.register('after_post_render', function(data) {
    data.content =
    util.htmlTag('link', {rel: 'stylesheet', type: 'text/css', href: '/css/lib/hint.min.css'}) +
    data.content;
    return data;
    });

Pandoc is a universal document converter!对 md 扩展支持让我拜倒,例如脚注的支持部分。需要提醒的是:pandoc 渲染器对 md 的格式要求更加规范些,例如 链接需要用< >括号显式包含;quoteblock 每行必须跟两空格表示换行(如果后续行没有>标记的话)。当然,把 Pandoc’s Markdown 浏览一下是很有必要的,或者 pdf 版本

  1. 第二种方法,使用Pandoc渲染器:

    在文件/layout/_layout.swig/body前加入:

    1
    <script type="text/javascript" src="/js/custom.js"></script>

    /themes/next/source/js中添加文件custom.js,在custom.js中添加

    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
    34
    35
    // 函数: html 中去掉 某 tag 最后那一次出现
    var rmLastElm = function(text, selector) {
    var wrapped = $("<div>" + text + "</div>");
    wrapped.find(selector).last().remove();
    return wrapped.html();
    }
    // 弹出 tip 显示 脚注
    var $fRef = $(".footnoteRef");
    for(let i=0; i<$fRef.length; i++) {
    var sup = $fRef.children("sup")[i]; //work reliably as long as there's exactly one sup per footnotRef
    // var sup = $fRef[i].children("sup"); //a classic Dom Element, so it doesn't have any children method
    sup.onmouseover = function(event) {
    $('.footnoteTip').remove();
    var pTip = document.createElement('div');
    pTip.className = 'footnoteTip'; // CSS
    pTip.innerHTML = rmLastElm(document.getElementById($fRef[i].getAttribute("href").substring(1)).innerHTML,"a");
    document.body.appendChild(pTip);

    var posLeft = event.pageX - 180;
    if (posLeft<0) posLeft = 20;
    var posTop = event.pageY + 20;
    var od = $('.footnoteTip');
    var oH = od.outerHeight();
    var oW = od.outerWidth();
    if(posTop + oH - window.pageYOffset > $(window).height()) posTop = posTop - oH -40;
    if (posLeft + oW > $(window).width()) posLeft = $(window).width() - oW -20; //NexT.Mist pageXOffset=0
    pTip.style.left = posLeft + 'px';
    pTip.style.top = posTop + 'px';

    };

    sup.onmouseout = function(event) {
    $('.footnoteTip').remove();
    };
    }

III.VII. 外链播放器

更多设置,查看音乐外链

III.VIII. 字体、字号与颜色

Markdown是一种可以使用普通文本编辑器编写的标记语言,通过类似HTML的标记语法,它可以使普通文本内容具有一定的格式。但是它本身是不支持修改字体、字号与颜色等功能的!CSDN-markdown编辑器语法——字体、字号与颜色

1
2
3
4
5
6
<font face="黑体">我是黑体字</font>
<font face="微软雅黑">我是微软雅黑</font>
<font face="STCAIYUN">我是华文彩云</font>
<font color=#0099ff size=7 face="黑体">color=#0099ff size=72 face="黑体"</font>
<font color=#00ffff size=72>color=#00ffff</font>
<font color=gray size=72>color=gray</font>

III.VIII.I. 字体颜色名列表

颜色名 十六进制颜色值 颜色
AliceBlue #F0F8FF rgb(240, 248, 255)
AntiqueWhite #FAEBD7 rgb(250, 235, 215)
Aqua #00FFFF rgb(0, 255, 255)
Aquamarine #7FFFD4 rgb(127, 255, 212)
Azure #F0FFFF rgb(240, 255, 255)
Beige #F5F5DC rgb(245, 245, 220)
Bisque #FFE4C4 rgb(255, 228, 196)
Black #000000 rgb(0, 0, 0)
BlanchedAlmond #FFEBCD rgb(255, 235, 205)
Blue #0000FF rgb(0, 0, 255)
BlueViolet #8A2BE2 rgb(138, 43, 226)
Brown #A52A2A rgb(165, 42, 42)
BurlyWood #DEB887 rgb(222, 184, 135)
CadetBlue #5F9EA0 rgb(95, 158, 160)
Chartreuse #7FFF00 rgb(127, 255, 0)
Chocolate #D2691E rgb(210, 105, 30)
Coral #FF7F50 rgb(255, 127, 80)
CornflowerBlue #6495ED rgb(100, 149, 237)
Cornsilk #FFF8DC rgb(255, 248, 220)
Crimson #DC143C rgb(220, 20, 60)
Cyan #00FFFF rgb(0, 255, 255)
DarkBlue #00008B rgb(0, 0, 139)
DarkCyan #008B8B rgb(0, 139, 139)
DarkGoldenRod #B8860B rgb(184, 134, 11)
DarkGray #A9A9A9 rgb(169, 169, 169)
DarkGreen #006400 rgb(0, 100, 0)
DarkKhaki #BDB76B rgb(189, 183, 107)
DarkMagenta #8B008B rgb(139, 0, 139)
DarkOliveGreen #556B2F rgb(85, 107, 47)
Darkorange #FF8C00 rgb(255, 140, 0)
DarkOrchid #9932CC rgb(153, 50, 204)
DarkRed #8B0000 rgb(139, 0, 0)
DarkSalmon #E9967A rgb(233, 150, 122)
DarkSeaGreen #8FBC8F rgb(143, 188, 143)
DarkSlateBlue #483D8B rgb(72, 61, 139)
DarkSlateGray #2F4F4F rgb(47, 79, 79)
DarkTurquoise #00CED1 rgb(0, 206, 209)
DarkViolet #9400D3 rgb(148, 0, 211)
DeepPink #FF1493 rgb(255, 20, 147)
DeepSkyBlue #00BFFF rgb(0, 191, 255)
DimGray #696969 rgb(105, 105, 105)
DodgerBlue #1E90FF rgb(30, 144, 255)
Feldspar #D19275 rgb(209, 146, 117)
FireBrick #B22222 rgb(178, 34, 34)
FloralWhite #FFFAF0 rgb(255, 250, 240)
ForestGreen #228B22 rgb(34, 139, 34)
Fuchsia #FF00FF rgb(255, 0, 255)
Gainsboro #DCDCDC rgb(220, 220, 220)
GhostWhite #F8F8FF rgb(248, 248, 255)
Gold #FFD700 rgb(255, 215, 0)
GoldenRod #DAA520 rgb(218, 165, 32)
Gray #808080 rgb(128, 128, 128)
Green #008000 rgb(0, 128, 0)
GreenYellow #ADFF2F rgb(173, 255, 47)
HoneyDew #F0FFF0 rgb(240, 255, 240)
HotPink #FF69B4 rgb(255, 105, 180)
IndianRed #CD5C5C rgb(205, 92, 92)
Indigo #4B0082 rgb(75, 0, 130)
Ivory #FFFFF0 rgb(255, 255, 240)
Khaki #F0E68C rgb(240, 230, 140)
Lavender #E6E6FA rgb(230, 230, 250)
LavenderBlush #FFF0F5 rgb(255, 240, 245)
LawnGreen #7CFC00 rgb(124, 252, 0)
LemonChiffon #FFFACD rgb(255, 250, 205)
LightBlue #ADD8E6 rgb(173, 216, 230)
LightCoral #F08080 rgb(240, 128, 128)
LightCyan #E0FFFF rgb(224, 255, 255)
LightGoldenRodYellow #FAFAD2 rgb(250, 250, 210)
LightGrey #D3D3D3 rgb(211, 211, 211)
LightGreen #90EE90 rgb(144, 238, 144)
LightPink #FFB6C1 rgb(255, 182, 193)
LightSalmon #FFA07A rgb(255, 160, 122)
LightSeaGreen #20B2AA rgb(32, 178, 170)
LightSkyBlue #87CEFA rgb(135, 206, 250)
LightSlateBlue #8470FF rgb(132, 112, 255)
LightSlateGray #778899 rgb(119, 136, 153)
LightSteelBlue #B0C4DE rgb(176, 196, 222)
LightYellow #FFFFE0 rgb(255, 255, 224)
Lime #00FF00 rgb(0, 255, 0)
LimeGreen #32CD32 rgb(50, 205, 50)
Linen #FAF0E6 rgb(250, 240, 230)
Magenta #FF00FF rgb(255, 0, 255)
Maroon #800000 rgb(128, 0, 0)
MediumAquaMarine #66CDAA rgb(102, 205, 170)
MediumBlue #0000CD rgb(0, 0, 205)
MediumOrchid #BA55D3 rgb(186, 85, 211)
MediumPurple #9370D8 rgb(147, 112, 216)
MediumSeaGreen #3CB371 rgb(60, 179, 113)
MediumSlateBlue #7B68EE rgb(123, 104, 238)
MediumSpringGreen #00FA9A rgb(0, 250, 154)
MediumTurquoise #48D1CC rgb(72, 209, 204)
MediumVioletRed #C71585 rgb(199, 21, 133)
MidnightBlue #191970 rgb(25, 25, 112)
MintCream #F5FFFA rgb(245, 255, 250)
MistyRose #FFE4E1 rgb(255, 228, 225)
Moccasin #FFE4B5 rgb(255, 228, 181)
NavajoWhite #FFDEAD rgb(255, 222, 173)
Navy #000080 rgb(0, 0, 128)
OldLace #FDF5E6 rgb(253, 245, 230)
Olive #808000 rgb(128, 128, 0)
OliveDrab #6B8E23 rgb(107, 142, 35)
Orange #FFA500 rgb(255, 165, 0)
OrangeRed #FF4500 rgb(255, 69, 0)
Orchid #DA70D6 rgb(218, 112, 214)
PaleGoldenRod #EEE8AA rgb(238, 232, 170)
PaleGreen #98FB98 rgb(152, 251, 152)
PaleTurquoise #AFEEEE rgb(175, 238, 238)
PaleVioletRed #D87093 rgb(216, 112, 147)
PapayaWhip #FFEFD5 rgb(255, 239, 213)
PeachPuff #FFDAB9 rgb(255, 218, 185)
Peru #CD853F rgb(205, 133, 63)
Pink #FFC0CB rgb(255, 192, 203)
Plum #DDA0DD rgb(221, 160, 221)
PowderBlue #B0E0E6 rgb(176, 224, 230)
Purple #800080 rgb(128, 0, 128)
Red #FF0000 rgb(255, 0, 0)
RosyBrown #BC8F8F rgb(188, 143, 143)
RoyalBlue #4169E1 rgb(65, 105, 225)
SaddleBrown #8B4513 rgb(139, 69, 19)
Salmon #FA8072 rgb(250, 128, 114)
SandyBrown #F4A460 rgb(244, 164, 96)
SeaGreen #2E8B57 rgb(46, 139, 87)
SeaShell #FFF5EE rgb(255, 245, 238)
Sienna #A0522D rgb(160, 82, 45)
Silver #C0C0C0 rgb(192, 192, 192)
SkyBlue #87CEEB rgb(135, 206, 235)
SlateBlue #6A5ACD rgb(106, 90, 205)
SlateGray #708090 rgb(112, 128, 144)
Snow #FFFAFA rgb(255, 250, 250)
SpringGreen #00FF7F rgb(0, 255, 127)
SteelBlue #4682B4 rgb(70, 130, 180)
Tan #D2B48C rgb(210, 180, 140)
Teal #008080 rgb(0, 128, 128)
Thistle #D8BFD8 rgb(216, 191, 216)
Tomato #FF6347 rgb(255, 99, 71)
Turquoise #40E0D0 rgb(64, 224, 208)
Violet #EE82EE rgb(238, 130, 238)
VioletRed #D02090 rgb(208, 32, 144)
Wheat #F5DEB3 rgb(245, 222, 179)
White #FFFFFF rgb(255, 255, 255)
WhiteSmoke #F5F5F5 rgb(245, 245, 245)
Yellow #FFFF00 rgb(255, 255, 0)
YellowGreen #9ACD32 rgb(154, 205, 50)

III.IX. 背景色

由于 style 标签和标签的 style 属性都被和谐了(这让Markdown虽然有HTML的躯体,却没有HTML的灵魂!),所以这里只能是借助 table, tr, td 等表格标签的 bgcolor 属性来实现背景色的功能。CSDN-markdown编辑器语法——背景色

1
<table><tr><td bgcolor=#7FFFD4>这里的背景色是:Aquamarine,  十六进制颜色值:#7FFFD4, rgb(127, 255, 212)</td></tr></table>
这里的背景色是:Aquamarine, 十六进制颜色值:#7FFFD4, rgb(127, 255, 212)

III.IX.I. 背景色列表

颜色名 十六进制颜色值 颜色
AliceBlue #F0F8FF rgb(240, 248, 255)
AntiqueWhite #FAEBD7 rgb(250, 235, 215)
Aqua #00FFFF rgb(0, 255, 255)
Aquamarine #7FFFD4 rgb(127, 255, 212)
Azure #F0FFFF rgb(240, 255, 255)
Beige #F5F5DC rgb(245, 245, 220)
Bisque #FFE4C4 rgb(255, 228, 196)
Black #000000 rgb(0, 0, 0)
BlanchedAlmond #FFEBCD rgb(255, 235, 205)
Blue #0000FF rgb(0, 0, 255)
BlueViolet #8A2BE2 rgb(138, 43, 226)
Brown #A52A2A rgb(165, 42, 42)
BurlyWood #DEB887 rgb(222, 184, 135)
CadetBlue #5F9EA0 rgb(95, 158, 160)
Chartreuse #7FFF00 rgb(127, 255, 0)
Chocolate #D2691E rgb(210, 105, 30)
Coral #FF7F50 rgb(255, 127, 80)
CornflowerBlue #6495ED rgb(100, 149, 237)
Cornsilk #FFF8DC rgb(255, 248, 220)
Crimson #DC143C rgb(220, 20, 60)
Cyan #00FFFF rgb(0, 255, 255)
DarkBlue #00008B rgb(0, 0, 139)
DarkCyan #008B8B rgb(0, 139, 139)
DarkGoldenRod #B8860B rgb(184, 134, 11)
DarkGray #A9A9A9 rgb(169, 169, 169)
DarkGreen #006400 rgb(0, 100, 0)
DarkKhaki #BDB76B rgb(189, 183, 107)
DarkMagenta #8B008B rgb(139, 0, 139)
DarkOliveGreen #556B2F rgb(85, 107, 47)
Darkorange #FF8C00 rgb(255, 140, 0)
DarkOrchid #9932CC rgb(153, 50, 204)
DarkRed #8B0000 rgb(139, 0, 0)
DarkSalmon #E9967A rgb(233, 150, 122)
DarkSeaGreen #8FBC8F rgb(143, 188, 143)
DarkSlateBlue #483D8B rgb(72, 61, 139)
DarkSlateGray #2F4F4F rgb(47, 79, 79)
DarkTurquoise #00CED1 rgb(0, 206, 209)
DarkViolet #9400D3 rgb(148, 0, 211)
DeepPink #FF1493 rgb(255, 20, 147)
DeepSkyBlue #00BFFF rgb(0, 191, 255)
DimGray #696969 rgb(105, 105, 105)
DodgerBlue #1E90FF rgb(30, 144, 255)
Feldspar #D19275 rgb(209, 146, 117)
FireBrick #B22222 rgb(178, 34, 34)
FloralWhite #FFFAF0 rgb(255, 250, 240)
ForestGreen #228B22 rgb(34, 139, 34)
Fuchsia #FF00FF rgb(255, 0, 255)
Gainsboro #DCDCDC rgb(220, 220, 220)
GhostWhite #F8F8FF rgb(248, 248, 255)
Gold #FFD700 rgb(255, 215, 0)
GoldenRod #DAA520 rgb(218, 165, 32)
Gray #808080 rgb(128, 128, 128)
Green #008000 rgb(0, 128, 0)
GreenYellow #ADFF2F rgb(173, 255, 47)
HoneyDew #F0FFF0 rgb(240, 255, 240)
HotPink #FF69B4 rgb(255, 105, 180)
IndianRed #CD5C5C rgb(205, 92, 92)
Indigo #4B0082 rgb(75, 0, 130)
Ivory #FFFFF0 rgb(255, 255, 240)
Khaki #F0E68C rgb(240, 230, 140)
Lavender #E6E6FA rgb(230, 230, 250)
LavenderBlush #FFF0F5 rgb(255, 240, 245)
LawnGreen #7CFC00 rgb(124, 252, 0)
LemonChiffon #FFFACD rgb(255, 250, 205)
LightBlue #ADD8E6 rgb(173, 216, 230)
LightCoral #F08080 rgb(240, 128, 128)
LightCyan #E0FFFF rgb(224, 255, 255)
LightGoldenRodYellow #FAFAD2 rgb(250, 250, 210)
LightGrey #D3D3D3 rgb(211, 211, 211)
LightGreen #90EE90 rgb(144, 238, 144)
LightPink #FFB6C1 rgb(255, 182, 193)
LightSalmon #FFA07A rgb(255, 160, 122)
LightSeaGreen #20B2AA rgb(32, 178, 170)
LightSkyBlue #87CEFA rgb(135, 206, 250)
LightSlateBlue #8470FF rgb(132, 112, 255)
LightSlateGray #778899 rgb(119, 136, 153)
LightSteelBlue #B0C4DE rgb(176, 196, 222)
LightYellow #FFFFE0 rgb(255, 255, 224)
Lime #00FF00 rgb(0, 255, 0)
LimeGreen #32CD32 rgb(50, 205, 50)
Linen #FAF0E6 rgb(250, 240, 230)
Magenta #FF00FF rgb(255, 0, 255)
Maroon #800000 rgb(128, 0, 0)
MediumAquaMarine #66CDAA rgb(102, 205, 170)
MediumBlue #0000CD rgb(0, 0, 205)
MediumOrchid #BA55D3 rgb(186, 85, 211)
MediumPurple #9370D8 rgb(147, 112, 216)
MediumSeaGreen #3CB371 rgb(60, 179, 113)
MediumSlateBlue #7B68EE rgb(123, 104, 238)
MediumSpringGreen #00FA9A rgb(0, 250, 154)
MediumTurquoise #48D1CC rgb(72, 209, 204)
MediumVioletRed #C71585 rgb(199, 21, 133)
MidnightBlue #191970 rgb(25, 25, 112)
MintCream #F5FFFA rgb(245, 255, 250)
MistyRose #FFE4E1 rgb(255, 228, 225)
Moccasin #FFE4B5 rgb(255, 228, 181)
NavajoWhite #FFDEAD rgb(255, 222, 173)
Navy #000080 rgb(0, 0, 128)
OldLace #FDF5E6 rgb(253, 245, 230)
Olive #808000 rgb(128, 128, 0)
OliveDrab #6B8E23 rgb(107, 142, 35)
Orange #FFA500 rgb(255, 165, 0)
OrangeRed #FF4500 rgb(255, 69, 0)
Orchid #DA70D6 rgb(218, 112, 214)
PaleGoldenRod #EEE8AA rgb(238, 232, 170)
PaleGreen #98FB98 rgb(152, 251, 152)
PaleTurquoise #AFEEEE rgb(175, 238, 238)
PaleVioletRed #D87093 rgb(216, 112, 147)
PapayaWhip #FFEFD5 rgb(255, 239, 213)
PeachPuff #FFDAB9 rgb(255, 218, 185)
Peru #CD853F rgb(205, 133, 63)
Pink #FFC0CB rgb(255, 192, 203)
Plum #DDA0DD rgb(221, 160, 221)
PowderBlue #B0E0E6 rgb(176, 224, 230)
Purple #800080 rgb(128, 0, 128)
Red #FF0000 rgb(255, 0, 0)
RosyBrown #BC8F8F rgb(188, 143, 143)
RoyalBlue #4169E1 rgb(65, 105, 225)
SaddleBrown #8B4513 rgb(139, 69, 19)
Salmon #FA8072 rgb(250, 128, 114)
SandyBrown #F4A460 rgb(244, 164, 96)
SeaGreen #2E8B57 rgb(46, 139, 87)
SeaShell #FFF5EE rgb(255, 245, 238)
Sienna #A0522D rgb(160, 82, 45)
Silver #C0C0C0 rgb(192, 192, 192)
SkyBlue #87CEEB rgb(135, 206, 235)
SlateBlue #6A5ACD rgb(106, 90, 205)
SlateGray #708090 rgb(112, 128, 144)
Snow #FFFAFA rgb(255, 250, 250)
SpringGreen #00FF7F rgb(0, 255, 127)
SteelBlue #4682B4 rgb(70, 130, 180)
Tan #D2B48C rgb(210, 180, 140)
Teal #008080 rgb(0, 128, 128)
Thistle #D8BFD8 rgb(216, 191, 216)
Tomato #FF6347 rgb(255, 99, 71)
Turquoise #40E0D0 rgb(64, 224, 208)
Violet #EE82EE rgb(238, 130, 238)
VioletRed #D02090 rgb(208, 32, 144)
Wheat #F5DEB3 rgb(245, 222, 179)
White #FFFFFF rgb(255, 255, 255)
WhiteSmoke #F5F5F5 rgb(245, 245, 245)
Yellow #FFFF00 rgb(255, 255, 0)
YellowGreen #9ACD32 rgb(154, 205, 50)

IV. 图床

V. 制作PPT

如何用 Markdown 做幻灯


  1. This is a footnote

  2. A footnote on "label"

  3. The definition of a footnote.