1, 强调 (删除 & 高亮)
2, 脚注 (注脚)
3, 数学公式
4, 更多扩展语法
5, 终极扩展之内嵌 html
5.1, 文本修饰类标签
5.2, 内容排版类标签
5.3, 图片及多媒体标签
5.4, 锚元素 (A 标签)
6, 总结
1, 强调 (删除 & 高亮)
Markdown 官方定义了粗体和斜体两个强调, 为了满足更加个性化的强调需求, 某些 Markdown 应用还定义了删除和高亮两个强调语法. 示例一下 (截自马克飞象):
2, 脚注 (注脚)
在纸质书中, 脚注一般印刷在书页的下端, 作用是对正文内容做进一步的补充说明.
而在 Markdown 中, 可以在文章的最后或其它你喜欢的地方定义脚注, 语法是 [^ 脚注名]: 说明文字, 然后就可以在需要脚注的文字后引用脚注了, 语法是 [^ 脚注名]. 而且点脚注名可以直接跳转到定义脚注的地方, 很方便看补充说明.
脚注用法, 示例一下 (截自马克飞象):
3, 数学公式
对高校理工科的师生, 或数学, 物理等领域的研究人员而言, 发论文, 写期刊时常有插入数学符号的需求. LaTeX https://www.latex-project.org/#target_blank 公式是学术圈的主流选择, LaTeX https://www.latex-project.org/#target_blank 是一种基于 TeX 的排版系统, 使用门槛比较低, 在生成复杂表格和数学公式这一块的表现尤为突出.
在互联网诞生之后, 又出现了在网页上显示数学符号的跨浏览器的 JavaScript 库, 较为知名的有 MathJax https://www.mathjax.org/#target_blank 和 KaTex https://katex.org/#target_blank .MathJax https://www.mathjax.org/#target_blank 的优点是支持绝大部分 TeX/LaTeX 语法, 且支持多种输出格式. 缺点是体积太大, 当公式比较多时渲染速度比较慢. KaTex https://katex.org/#target_blank 比 MathJax https://www.mathjax.org/#target_blank 要快, 也更易于使用, 但支持得不够全面.
很多知名的学术网站都支持 MathJax https://www.mathjax.org/#target_blank , 而多数 Markdown 工具则是通过支持 KaTex https://katex.org/#target_blank 进而实现对 LaTeX https://www.latex-project.org/#target_blank 公式的支持, 印象笔记的 Markdown 就是其中之一.
通常在公式前后加一个 $ 表示行内公式, 在公式前后加两个 $ 表示块级公式. 这种用 $ 包裹数学公式的写法 MathJax https://www.mathjax.org/#target_blank 和 KaTex https://katex.org/#target_blank 都支持, 因此推荐这种写法. 示例一下 (截自印象笔记):
有些 Markdown 工具还会提供特有的公式写法, 比如印象笔记, 尽管可能比通用标准更好用, 但依然建议尽量不要使用, 因为迁移成本太高. 示例一下 (截自印象笔记):
如果你还想了解更多数学公式的写法, 可参考如下两个链接:
常用数学符号的 LaTeX 表示方法
KaTeX Support Table of TeX Functions
4, 更多扩展语法
我在本系列的第三篇博文和前文中已经介绍了 9 种很赞的扩展语法. 其实还有许多对特定人群或特定场景来说比较实用的扩展语法. 比如很多 Markdown 工具都支持的代码高亮. 又比如 GFM 中的 @mention,#reference,Emoji 表情等便于在 GitHub 上进行沟通协作的语法. 再比如印象笔记的 Markdown 支持的图表语法.
5, 终极扩展之内嵌 HTML
在本系列的第一篇博文中介绍过, Markdown 引擎会把 Markdown 语法转换为 HTML, 所以理论上, 我们可以在 Markdown 文档中内嵌入任何 HTML 标签, 当然也包括 CSS. 所以, 但如果你是个喜欢折腾的人, 那么你还可以用终极大杀器 HTML 来对 Markdown 文档做进一步的个性化扩展或美化.
注意: 本文中的 HTML 泛指广义上的 HTML, 包括 HTML,XHTML,HTML5 等.
下面就来介绍一下如何在 Markdown 中嵌入 HTML 以及常见的 Markdown 语法所对应的 HTML 标签.
5.1, 文本修饰类标签
Markdown 语法与 HTML 中文本修饰类标签的对应关系:
1,Markdown 中的标题对应着 HTML 中的 h 标签. 一个 * 对应 < h1>, 两个 * 对应 < h2>, 以此类推.
2,Markdown 中的粗体强调对应着 HTML 中的 < strong > 标签.
3,Markdown 中的斜体强调对应着 HTML 中的 < em > 标签.
4,Markdown 中的删除线对应着 HTML 中的 < del > 标签.
5,Markdown 中的下划线对应着 HTML 中的 < u > 标签.
如果你对文本显示效果有更多的要求, 可以试一下 HTML 中的 < font > 标签, 因为 < font > 可以同时规定文本的字体, 大小和颜色.
示例一下 HTML 中有文本上标, 下标和键盘标签 (截自 MarkdownPad2):
5.2, 内容排版类标签
Markdown 语法与 HTML 中内容排版类标签的对应关系:
1,Markdown 中的行内代码块对应着 HTML 中的 < code > 标签.
2,Markdown 中的多行代码块对应着 HTML 中的 < pre > 标签.
3,Markdown 中的有序列表对应着 HTML 中的 < ol><li > 标签.
4,Markdown 中的无序列表对应着 HTML 中的 < ul><li > 标签.
5,Markdown 中的引用对应着 HTML 中的 < blockquote > 标签.
6,Markdown 中的分割线对应着 HTML 中的 < hr > 标签.
7,Markdown 中的表格对应着 HTML 中的 < table > 标签.
HTML 中有很多排版标签, 比如换行标签 < br/>, 甚至还可以在 HTML 中嵌入 CSS 代码, 比如通过 text-align 来实现文本对齐, 通过 text-indent 来实现文本缩进等.
示例一下 CSS 的居中和缩进 (截自 MarkdownPad2):
5.3, 图片及多媒体标签
Markdown 中的图片链接会被转换成 HTML 中的 < img > 标签. 图片链接是 Markdown 中最酷的功能之一, 因为从没有任何一个工具能如此方便的将图片嵌入到文档之中, 而 Markdown 做到了. 但便捷的同时, 也意味着功能的欠缺, 除了 title 以外, 无法再为图片链接设置其它任何属性, 所以转换后的 < img > 的样式也是默认的.
如果要实现更好的图文混排效果, 也可以直接在 Markdown 中输入 < img > 并自由指定想要的属性. 比如通过 align 指定图片对齐方式, 通过 width 指定图片宽度, 通过 height 指定图片高度, 通过 border 指定图片边框等.
示例一下图片居中和加框 (截自 MarkdownPad2):
不仅可以在 Markdown 中直接用 < img > 标签, 还可以用 < audio > 和 < video > 等多媒体标签. 比如通过 < video > 来嵌入一个视频:
示例一下, 输入文本如下:
- <video height="360px" width="640px" controls>
- <source src="https://interactive-examples.mdn.mozilla.net/media/examples/flower.webm" type="video/webm">
- </video>
显示效果如下:
5.4, 锚元素 (A 标签)
Markdown 中的文本链接和引用链接最终都会被转化为 HTML 中的 A 标签. 在 HTML 中, A 标签的作用是创建通向其他网页, 文件, 同一页面内的位置, 电子邮件地址或任何其他 URL 的超链接. Markdown 的链接实现了 A 标签最基础的功能, 但有两个常用的特性尚未充分支持, 分别是页内跳转和 target 属性.
页内跳转功能也叫锚点定位. 锚点是超链接的一种, 能够直接定位到页面内的某个部分, 因此也叫内部链接或页内超链接. 在网络上, 锚点的应用十分普遍, 如跳转到同一页面内不同的位置, 跳转到其他页面的特定位置, 文章目录等.
锚点的实现方式有三种, 由于不方便演示, 这里我仅给出实现的代码, 有兴趣的朋友可拷贝代码进行尝试.
方式一: 通过 id 属性实现. 即把目标位置标签的 id 属性值写到 A 标签的 href 属性的末尾. 这种方法可以定位到任何类型的 HTML 标签, 比较常用的标签有 < h>,<a>,<div>,<span>,<font > 等等.
- <a href="url# 锚点名称">
- 跳转链接的文本
- </a>
- <h2 id="锚点名称">
- 目标位置的文本
- </h2>
方式二: 通过 name 属性实现. 即把目标位置标签的 name 属性值写到 A 标签的 href 属性的末尾. 这种方法只适用于 A 标签.
- <a href="url# 锚点名称">
- 跳转链接的文本
- </a>
- <a name="锚点名称">
- 目标位置的文本
- </a>
方式三: 通过 JS 脚本实现.
- <a href="javascript:void(0)" onclick="document.getElemetnById('anchor').scrollIntoView(true);return false;">
- </a>
- <div id="anchor">
- </div>
在 Markdown 中定义一个带锚点的链接的格式是 [description](url#anchorName), 如果不写 url 部分, 那么 url 默认就会是当前页的链接, 换句话说, 该链接就成了一个内部链接.
由于目前很多博客依然不支持 Markdown 的 TOC 扩展, 所以我们只好结合 HTML 的锚点和 Markdown 的内部链接, 来手动实现博文的目录功能.
A 标签的 target 属性用于指定在何处打开链接资源. 如果 target 的值为_blank, 则表示在新的窗口打开链接; 如果不给 target 指定值, 那么 target 的默认值就是_selft, 表示在当前窗口中打开链接.
而 Markdown 的链接转换成的 A 标签时默认都不带 target 属性, 这也就意味着 Markdown 语法本身不支持链接在新窗口中打开. 要实现在新窗口中打开链接的效果, 只能直接用 A 标签, 然后把 target 属性的值指定为_blank.
如要在新窗口中打开博客园首页, 示例一下, 输入文本如下:
<a target="_blank" href="https://www.cnblogs.com/"> 博客园首页 </a>
显示效果如下:
博客园首页
6, 总结
本文进一步介绍了几种 Markdown 扩展语法, 并着重介绍了如何在 Markdown 中使用 HTML 和 CSS.
在实际写作过程中, 如果想要用 HTML 标签, 那么直接在 Markdown 编辑器中用就是了. 尤其是行内元素, 几乎可以自由的放在 Markdown 中的任何位置 (目前发现代码块中不行). 唯一需要注意的是, 最好在块级元素的上下留出至少一个空行, 否则可能会有显示问题. 另外, 不能把 Markdown 语法放到块级元素中.
本文链接: http://www.cnblogs.com/hanzongze/p/markdown-xhtml.html
来源: https://www.cnblogs.com/hanzongze/p/markdown-xhtml.html