V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Daring Fireball: Markdown
CommonMark
MacDown Open Source Markdown Editor
Marked
GitHub Flavored Markdown
cdoco
V2EX  ›  Markdown

Markdown 语法详解

  •  
  •   cdoco · 2017-09-25 11:10:38 +08:00 · 8663 次点击
    这是一个创建于 2623 天前的主题,其中的信息可能已经有所发展或是发生改变。

    V2EX 的 Markdown 支持不完善, 可以查看 github 地址 https://github.com/cdoco/markdown-syntax

    什么是 Markdown ?

    Markdown 是一种可以使用普通文本编辑器编写的标记语言, 通过简单的标记语法, 它可以使普通文本内容具有一定的格式。

    目录

    分级标题

    第一种写法:

    这是一个一级标题
    ============================
    
    这是一个二级标题
    --------------------------------------------------
    

    这是一个一级标题

    这是一个二级标题


    第二种写法:

    # 一级标题
    ## 二级标题
    ### 三级标题
    #### 四级标题
    ##### 五级标题
    ###### 六级标题
    

    一级标题

    二级标题

    三级标题

    四级标题

    五级标题
    六级标题

    分隔线

    你可以在一行中用三个以上的星号、减号、底线来建立一个分隔线, 行内不能有其他东西。你也可以在星号或是减号中间插入空格。下面每种写法都可以建立分隔线:

    * * *
    
    ***
    
    *****
    
    - - -
    
    ---------------------------------------
    


    超链接

    Markdown 支持两种形式的链接语法: 行内式和参考式两种形式, 行内式一般使用较多。

    行内式

    []里写链接文字,()里写链接地址, ()中的 "" 中可以为链接指定 title 属性, title 属性可加可不加。title 属性的效果是鼠标悬停在链接上会出现指定的 title 文字。[链接文字](链接地址 "链接标题") 这样的形式。链接地址与链接标题前有一个空格。

    [Markdown Syntax]( https://github.com/cdoco/markdown-syntax)
    [Markdown Syntax]( https://github.com/cdoco/markdown-syntax "Markdown Syntax")
    

    Markdown Syntax

    Markdown Syntax

    参考式

    参考式超链接一般用在学术论文上面, 或者另一种情况, 如果某一个链接在文章中多处使用, 那么使用引用的方式创建链接将非常好, 它可以让你对链接进行统一的管理。

    参考式链接分为两部分, 文中的写法 [链接文字][链接标记],在文本的任意位置添加 [链接标记]:链接地址 "链接标题", 链接地址与链接标题前有一个空格。

    全球最大的搜索引擎网站是[Google][1]。
    
    [1]:http://www.google.com "Google"
    

    全球最大的搜索引擎网站是 Google

    自动链接

    Markdown 支持以比较简短的自动链接形式来处理网址和电子邮件信箱, 只要是用 <> 包起来,Markdown 就会自动把它转成链接。一般网址的链接文字就和链接地址一样, 例如:

    <https://google.com/>
    
    <[email protected]>
    

    https://google.com/

    [email protected]

    区块引用

    区块引用需要在被引用的文本前加上 > 符号。

    > 这是一个区块引用实例,
    
    > Markdown.
    

    这是一个区块引用实例,

    Markdown.

    Markdown 也允许你偷懒只在整个段落的第一行最前面加上 > :

    > 平生不会相思,
    才会相思,
    便害相思。
    
    > 空一缕余香在此,
    盼千金游子何之。
    

    平生不会相思, 才会相思, 便害相思。

    空一缕余香在此, 盼千金游子何之。

    引用的多层嵌套

    区块引用可以嵌套(例如:引用内的引用), 只要根据层次加上不同数量的 > :

    >>> 锄禾日当午, 汗滴禾下土。 - 李绅
    
    >> 山有木兮木有枝, 心悦君兮君不知。 - 越人歌
    
    > 去年今日此门中, 人面桃花相映红。 - 崔护
    

    锄禾日当午, 汗滴禾下土。 - 李绅

    山有木兮木有枝, 心悦君兮君不知。 - 越人歌

    去年今日此门中, 人面桃花相映红。 - 题都城南庄

    引用其它要素

    引用的区块内也可以使用其他的 Markdown 语法,包括标题、列表、代码区块等:

    > - 入我相思门, 知我相思苦。
    >
    > - 长相思兮长相忆, 短相思兮无穷极。
    >
    > - 给出一些例子代码:
    > ```markdown
    >   return debug_backtrace();
    > ```
    
    • 入我相思门, 知我相思苦。

    • 长相思兮长相忆, 短相思兮无穷极。

    • 给出一些例子代码:

      return debug_backtrace();
    

    锚点

    网页中, 锚点其实就是页内超链接, 也就是链接本文档内部的某些元素, 实现当前页面中的跳转。比如我这里写下一个锚点, 点击回到目录, 就能跳转到目录。 在目录中点击这一节, 就能跳过来。还有下一节的注脚。这些根本上都是用锚点来实现的。

    **[⬆ top](#什么是-markdown-)**
    

    ⬆ top

    强调

    Markdown 使用星号*和底线_作为标记强调字词的符号。

    斜体

    *花自飘零水自流*
    

    花自飘零水自流

    粗体

    **花自飘零水自流**
    

    花自飘零水自流

    删除线

    ~~花自飘零水自流~~
    

    ~~花自飘零水自流~~

    列表

    使用 *,+,- 表示无序列表。

    无序列表

    - 白头吟
    - 击鼓
    - 断句
    
    • 白头吟

    • 击鼓

    • 断句

    有序列表

    有序列表则使用数字接着一个英文句点。

    1. 白头吟
    2. 击鼓
    3. 断句
    
    1. 白头吟

    2. 击鼓

    3. 断句

    包含引用的列表

    如果要在列表项目内放进引用,那 > 就需要缩进:

    * 菩提偈:
    
      > 菩提本无树,明镜亦非台。
      > 本来无一物,何处惹尘埃!
    
    • 菩提偈:

      菩提本无树,明镜亦非台。 本来无一物,何处惹尘埃!

    插入图片

    图片的创建方式与超链接相似, 而且和超链接一样也有两种写法, 行内式和参考式写法。

    语法中图片 Alt 的意思是如果图片因为某些原因不能显示, 就用定义的图片 Alt 文字来代替图片。 图片 Title 则和链接中的 Title 一样, 表示鼠标悬停与图片上时出现的文字。Alt 和 Title 都不是必须的, 可以省略, 但建议写上。

    图片行内式

    ![图片 Alt](图片地址 "图片 Title")

    ![哆啦 A 梦]( https://cdoco.com/images/duolaameng.jpeg "哆啦 A 梦")
    

    哆啦 A 梦

    图片参考式

    在文档要插入图片的地方写 ![图片 Alt][标记]

    在文档的最后写上 [标记]:图片地址 "Title"

    ![哆啦 A 梦][duolaameng]
    
    [duolaameng]:https://cdoco.com/images/duolaameng.jpeg "哆啦 A 梦"
    

    哆啦 A 梦

    表格

    1. 不管是哪种方式, 第一行为表头, 第二行分隔表头和主体部分, 第三行开始每一行为一个表格行。
    2. 列于列之间用管道符|隔开。原生方式的表格每一行的两边也要有管道符。
    3. 第二行还可以为不同的列指定对齐方向。默认为左对齐, 在-右边加上:就右对齐。

    简单方式:

    诗名|作者|朝代
    -|-|-
    白头吟|卓文君|两汉
    锦瑟|李商隐|唐代
    登科后|孟郊|唐代
    

    诗名|作者|朝代 -|-|- 白头吟|卓文君|两汉 锦瑟|李商隐|唐代 登科后|孟郊|唐代

    原生方式:

    |诗名|作者|朝代|
    |-|-|-|
    |白头吟|卓文君|两汉|
    |锦瑟|李商隐|唐代|
    |登科后|孟郊|唐代|
    

    |诗名|作者|朝代| |-|-|-| |白头吟|卓文君|两汉| |锦瑟|李商隐|唐代| |登科后|孟郊|唐代|

    为表格第二列指定方向:

    诗名|名句
    -|-:
    梦微之|君埋泉下泥销骨。
    上邪|上邪,我欲与君相知,长命无绝衰。
    

    诗名|名句 -|-: 梦微之|君埋泉下泥销骨。 上邪|上邪,我欲与君相知,长命无绝衰。

    代码

    对于程序员来说这个功能是必不可少的, 插入程序代码的方式有两种, 一种是利用缩进(Tab), 另一种是利用 "`" 符号(一般在 ESC 键下方)包裹代码。

    • 插入行内代码, 即插入一个单词或者一句代码的情况,使用 `code` 这样的形式插入。
    • 插入多行代码, 可以使用缩进或者 ``` code ```, 具体看示例。

    代码行内式

    PHP 打印堆栈信息 `debug_backtrace()`。
    

    PHP 打印堆栈信息 debug_backtrace()

    缩进式多行代码

    缩进 4 个空格或是 1 个制表符。

    一个代码区块会一直持续到没有缩进的那一行(或是文件结尾)。

        $closure = function () use($name) {
          return $name;
        }
    
    $closure = function () use($name) {
      return $name;
    }
    

    用六个 ` 包裹多行代码

    ```php
    $closure = function () use($name) {
      return $name;
    }
    ` ``
    
    $closure = function () use($name) {
      return $name;
    }
    

    HTML 原始码

    在代码区块里面, &<> 会自动转成 HTML 实体, 这样的方式让你非常容易使用 Markdown 插入范例用的 HTML 原始码, 只需要复制贴上, 剩下的 Markdown 都会帮你处理,例如:

    <table>
        <tr>
            <th rowspan="2">值班人员</th>
            <th>星期一</th>
            <th>星期二</th>
            <th>星期三</th>
        </tr>
        <tr>
            <td>李强</td>
            <td>张明</td>
            <td>王平</td>
        </tr>
    </table>
    
    值班人员 星期一 星期二 星期三
    李强 张明 王平

    内容目录

    在段落中填写 [TOC] 以显示全文内容的目录结构。

    注脚

    在需要添加注脚的文字后加上脚注名字[^注脚名字], 称为加注。 然后在文本的任意位置(一般在最后)添加脚注, 脚注前必须有对应的脚注名字。

    使用 Markdown[^1]可以效率的书写文档, 直接转换成 HTML[^2]。
    
    [^1]: Markdown 是一种纯文本标记语言
    
    [^2]: HyperText Markup Language 超文本标记语言
    

    PS: github 不支持注脚

    LaTeX 公式

    $ 表示行内公式

    质能守恒方程可以用一个很简洁的方程式 $E=mc^2$ 来表达。
    

    质能守恒方程可以用一个很简洁的方程式 来表达。

    $$ 表示整行公式

    $$\sum_{i=1}^n a_i=0$$
    $$f(x_1,x_x,\ldots,x_n) = x_1^2 + x_2^2 + \cdots + x_n^2 $$
    $$\sum^{j-1}_{k=0}{\widehat{\gamma}_{kj} z_k}$$
    

    PS: github 不支持 LaTeX 公式

    流程图

    st=>start: Start:>https://www.markdown-syntax.com
    io=>inputoutput: verification
    op=>operation: Your Operation
    cond=>condition: Yes or No?
    sub=>subroutine: Your Subroutine
    e=>end
    st->io->op->cond
    cond(yes)->e
    cond(no)->sub->io
    

    PS: github 不支持流程图

    时序图

    Alice->Bob: Hello Bob, how are you ?
    Note right of Bob: Bob thinks
    Bob-->Alice: I am good thanks!
    

    PS: github 不支持时序图

    待办事宜列表

    使用带有 [ ][x] (未完成或已完成)项的列表语法撰写一个待办事宜列表, 例如:

    - [ ]早起跑步
    - [x]看书
    

    ⬆ top

    24 条回复    2024-01-23 15:49:53 +08:00
    flaneurse
        1
    flaneurse  
       2017-09-25 12:04:39 +08:00 via Android   ❤️ 1
    无聊么?
    AltairT
        2
    AltairT  
       2017-09-25 12:12:03 +08:00 via iPhone
    这个也来水一贴? v 站里不会 md 的人很少吧……
    sunjourney
        3
    sunjourney  
       2017-09-25 12:28:44 +08:00
    @AltairT #2 默默看一眼右下角收藏数
    hundan
        4
    hundan  
       2017-09-25 12:38:39 +08:00 via Android
    本来是想吐槽的,不过进来一看感觉楼主发的还是蛮全面的,公式流程图什么的都有
    Williamwang
        5
    Williamwang  
       2017-09-25 13:30:34 +08:00
    @sunjourney 经此评论提醒,默默点了收藏哈哈哈
    bbvps
        6
    bbvps  
       2017-09-25 13:31:54 +08:00
    Alice->Bob: Hello Bob, how are you ?
    Note right of Bob: Bob thinks
    Bob-->Alice: I am good thanks!
    bp0
        7
    bp0  
       2017-09-25 13:50:33 +08:00
    默默收藏就好
    xfspace
        8
    xfspace  
       2017-09-25 14:01:29 +08:00
    不是所有编辑器都支持所有语法。。。。。。。
    delogn
        9
    delogn  
       2017-09-25 16:09:24 +08:00
    这个表格语法不对吧 原生的不应该是 |---|---|---|
    soratadori
        10
    soratadori  
       2017-09-25 16:22:34 +08:00
    markdown 的设计有很多缺陷,我干脆自己写了个新的标记语言。
    ctsed
        11
    ctsed  
       2017-09-25 16:24:52 +08:00 via Android
    井号后面要有空格吗,有的编辑器能正常显示,有的就不行
    Bigears
        12
    Bigears  
       2017-09-25 16:30:21 +08:00
    zeroten
        13
    zeroten  
       2017-09-25 16:48:30 +08:00   ❤️ 1
    这不是 markdown 语法,而是某种方言,不要误导人。。。正宗语法: https://daringfireball.net/projects/markdown/syntax
    zeroten
        14
    zeroten  
       2017-09-25 16:49:15 +08:00
    @delogn 原生 markdown 哪里来的表格????
    tamlok
        15
    tamlok  
       2017-09-25 16:54:27 +08:00 via Android
    @zeroten md 语法没有正不正宗,当初只是一个实现给出的,不像其他语言,是通过标准给出。后面才慢慢有一个 common markdown,但也不能说谁正宗或不正宗,只能说基本语法和扩展语法?
    kingcos
        16
    kingcos  
       2017-09-25 16:58:01 +08:00
    表格不太对。。不过 V2 不是有预览?难道渲染效果跟直接发出来不一样吗= =
    还是直接在本地 Markdown 写好就复制到这里来了= =
    rogwan
        17
    rogwan  
       2017-09-25 17:05:05 +08:00 via Android
    markdown 除了标准语法之外,其他的衍生语法都是累赘。

    制表,科学公式这些用专门的工具处理更好。理论上讲,只要你不嫌烦,可以拿 md 来绘图不是?别都让 md 处理,一来复杂语法用的少,记不住;二是根本没有通用性,你一分享就乱作一团,还不是要转成图片或 PDF 分享?
    lybtongji
        18
    lybtongji  
       2017-09-25 17:25:09 +08:00
    markdown 感觉太杂,不敢正式用
    rogwan
        19
    rogwan  
       2017-09-25 18:57:29 +08:00 via Android
    @lybtongji 楼主的这篇文章,是来给 markdown 拉仇恨的😄

    乍一看,都快赶上一门 shell 语言啦 (●—●) 实际原生的 md 语法很克制的。
    AltairT
        20
    AltairT  
       2017-09-26 00:36:03 +08:00
    @sunjourney 总体来讲不会的还是少,在说对有编程基础的人来说上手很快.我现在也尝试用 MD 做笔记,记完就推到 Hexo 搭建的 github 博客上.图片是新建个文件夹拖进去就行.
    robots007
        21
    robots007  
       2017-10-16 10:05:42 +08:00
    没有字体颜色啊
    cpublic
        22
    cpublic  
       2017-10-29 00:34:21 +08:00
    ** 难道 V2EX 竟然支持 MarkDown 语法嘛?
    immutable
        23
    immutable  
       2017-12-02 21:31:14 +08:00
    *写个 markdown 试试*
    liuymf
        24
    liuymf  
       312 天前
    ```java
    public class Example {
    public static void main(String[] args) {
    System.out.println("Hello, World!");
    }
    }
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2344 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 01:54 · PVG 09:54 · LAX 17:54 · JFK 20:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.