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

求关于 Markdown 或类似标记语言的任何吐槽、建议、个人使用风格说明。

  •  
  •   jakwings · 2014-03-04 21:19:24 +08:00 · 10230 次点击
    这是一个创建于 3677 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对回复者的第一条回复必送感谢!
    最好让这个主题成为 Markdown 节点的吐槽集中营,好方便其它想实现类似 Markdown 的标记语言的设计者参考。
    54 条回复    1970-01-01 08:00:00 +08:00
    killpanda
        1
    killpanda  
       2014-03-04 21:24:09 +08:00   ❤️ 1
    有一个不太满意的地方, # ## ### 通常情况下没法居中。
    jakwings
        2
    jakwings  
    OP
       2014-03-04 21:30:21 +08:00
    @killpanda 为什么各级标题要居中呢?这种需求似乎比较少见,也不太容易配合网页内容布局。
    还是说标题内无法包含 # ?
    allenforrest
        3
    allenforrest  
       2014-03-04 21:34:20 +08:00 via iPhone
    用html标记可以居中
    allenforrest
        4
    allenforrest  
       2014-03-04 21:35:24 +08:00 via iPhone   ❤️ 2
    跑题了,我想说的一个是,markdown对于表格的支持不好,很不统一
    killpanda
        5
    killpanda  
       2014-03-04 21:41:30 +08:00   ❤️ 1
    @jakwings 仔细想了一下,我平时的用法是在第一行给整个文档一个主标题(Title)。所以通常我会用 Head 1 来做标题。这下让标题居中的需求挺正常吧。

    当然我知道 Head 1 不是用来做 Title 的。但通常我都是把 MD 转换为 PDF 来储存,所以不太在乎各级标题的结构,只要让 # ## ### 顺延下去就可以了。
    strak47
        6
    strak47  
       2014-03-04 21:43:36 +08:00   ❤️ 1
    想要打多个空格的时候比较麻烦,比如段首?

    在octopress常看到中文文章里面的有些 `英文` 会被拉常, 比如

    或许这跟markdown本身无关

    经常想打下面这种信息,每次都想实现冒号对齐,似乎markdown没办法,还是我不知道?
    name: xxx
    email: yyy
    address: zzz
    jakwings
        7
    jakwings  
    OP
       2014-03-04 21:55:11 +08:00
    @killpanda PDF 比较麻烦,Markdown 原初是为了 HTML 而创造的,肯定无法考虑到这么多风格。

    H1 是可以当大标题的,是否只用一个 H1 标题,只是风格问题罢了。HTML5 的规范里也有说明:
    http://www.w3.org/TR/html5/sections.html#the-h1,-h2,-h3,-h4,-h5,-and-h6-elements

    假如转换工具有提供设定标题号偏移量会更好。至于标题居中,HTML 可以通过 CSS 样式表实现。
    你也可以用 Chrome 浏览器将已经转换为 HTML 文档并应用了 CSS 样式的文档转换为 PDF ,我一般都是这么转换出 PDF 的,Chrome 有预览功能,很方便。
    killpanda
        8
    killpanda  
       2014-03-04 21:59:18 +08:00
    @jakwings 好 谢谢你的建议
    jakwings
        9
    jakwings  
    OP
       2014-03-04 22:03:44 +08:00
    @strak47 HTML 要实现段首缩进可以应用 CSS 样式表中的 text-indent 规则(可能你听不懂吧……),另外列表和引用之类的元素缩进也要相应调整一下才行。在应用了 CSS 样式之后,你就可以通过在 md 代码的段首添加一到三个空格来模仿缩进了,反正空格会被忽略。

    Markdown 原生没有和对齐相关的语法。只能通过代码块模拟了,或者直接嵌入 HTML 代码解决。
    strak47
        10
    strak47  
       2014-03-04 22:14:33 +08:00
    一直不喜欢md和html混合写,个人还是希望能用纯md实现
    我有那么菜么css都听不懂……
    PotatoBrother
        11
    PotatoBrother  
       2014-03-04 22:24:21 +08:00 via iPhone   ❤️ 1
    Python里面的__init__这类名称会被转义……
    jakwings
        12
    jakwings  
    OP
       2014-03-04 22:32:52 +08:00
    @strak47 哈,纠结段首缩进的一般没考虑过纠结 CSS 样式。自从知道 text-indent 之后我就不在 md 文本用空格添加缩进了,减轻了打字时是否考虑输入全角空格的负担。
    英文变宽那个问题,似乎是 CSS 样式中的 text-align: justify 对齐样式导致的。
    jakwings
        13
    jakwings  
    OP
       2014-03-04 22:35:49 +08:00
    @PotatoBrother 代码这种奇怪的东东一般用代码格式会比较好吧……`__init__`
    vexfisher
        14
    vexfisher  
       2014-03-04 23:12:02 +08:00   ❤️ 2
    表格的支持确实有待完善
    每次我使用表格都是用HTML的,有类似的同学不?
    caonan
        15
    caonan  
       2014-03-04 23:21:41 +08:00   ❤️ 2
    我觉得MD设计出来就是写简单东西的,涉及到复杂排版的时候尽量还是避免。
    hit9
        16
    hit9  
       2014-03-04 23:26:00 +08:00   ❤️ 1
    md是无样式的。
    cedared
        17
    cedared  
       2014-03-05 07:37:22 +08:00 via iPhone   ❤️ 2
    @killpanda <center>可破居中
    yukirock
        18
    yukirock  
       2014-03-05 08:23:29 +08:00   ❤️ 1
    @killpanda CSS 里居中就一行代码的事,如果是 .md -> .html -> .pdf 的话只要在 HTML 方面处理一下即可。

    ***

    如果一段里只有一张图片的话,MD 也要拿个 `<p>` 给它封装起来,变成 `<p><img></p>` 的样子。这样一来 p 声明的样式会影响到 img,例如 `text-indent`。

    ***

    用缩进控制列表层级一定不是好主意,我比较倾向于 Textile 的方案:https://en.wikipedia.org/wiki/Textile_(markup_language)#Lists
    SoloCompany
        19
    SoloCompany  
       2014-03-05 08:56:20 +08:00 via Android   ❤️ 1
    不能直接插入简单URL,要原样插入URL必须至少复制一次
    gdm
        20
    gdm  
       2014-03-05 08:58:40 +08:00   ❤️ 2
    行末那两个空格让我很介意,麻烦死了,而且很丑
    soli
        21
    soli  
       2014-03-05 09:21:53 +08:00   ❤️ 1
    用 Markdown 最蛋疼的就是各种方言了。

    因为有很多东西官方的都不支持,所以发展出了各种各样的方言。

    各种方言的分裂,不但为相应应用的开发者造成了麻烦,还让最终用户无所适从。
    hhrmatata
        22
    hhrmatata  
       2014-03-05 09:28:49 +08:00   ❤️ 1
    原生支持类似pandoc中的:

    % title
    % author(s) (separated by semicolons)
    % date

    并且居中,作为文章的标题块。

    不喜欢嵌入css, html标签
    AnyOfYou
        23
    AnyOfYou  
       2014-03-05 10:43:49 +08:00   ❤️ 1
    -> title <-
    这样是可以居中的
    Akagi201
        24
    Akagi201  
       2014-03-05 10:57:28 +08:00   ❤️ 1
    怎么插入视频?
    jakwings
        25
    jakwings  
    OP
       2014-03-05 12:58:41 +08:00
    @yukirock 其实让 text-indent 影响图片没什么不好,因为假如文本不是溢出分出多行的话,图片处于段落边界之外还是挺难看的,又得特地给图片加缩进等级。
    jakwings
        26
    jakwings  
    OP
       2014-03-05 13:10:56 +08:00
    @yukirock 用标记符号的长度来指示层级,其实在视觉上并不明显,内容多了便看不清楚了。另外也一般来说也不必太多缩进层级吧?缩进三层最少用 6 个空格便可以了。
    * A

    __* B

    ____* C
    jakwings
        27
    jakwings  
    OP
       2014-03-05 13:16:36 +08:00
    @Akagi201 为了兼容几乎所有浏览器,一般要 Flash 播放器,那么肯定要通过嵌入 HTML 代码来插入。Markdown 原来也没有插入视频的简单语法,只能靠 HTML 代码。虽然现在有 HTML5 ,但是那个 <audio> 插入视频的方法还没完全被各大浏览器支持,而且要调整视频尺寸和自动播放还有其它等等功能,不可能设计出相应的简单语法,还是直接用 HTML 省事。视频也不是可打印的元素,在打印时最多只能用 CSS 显示出视频地址。
    jakwings
        28
    jakwings  
    OP
       2014-03-05 13:19:44 +08:00   ❤️ 1
    jakwings
        29
    jakwings  
    OP
       2014-03-05 13:20:51 +08:00
    @SoloCompany 我晕,V2EX 不知道怎么过滤我发表的内容的,太凶残了……总之用两个尖括号包住 URL 就可以了。
    halfbloodrock
        30
    halfbloodrock  
       2014-03-05 13:42:27 +08:00   ❤️ 1
    语法过于简单,导致一些情况下只能插入了html。。。整个文档看起来一团糟糕。

    这个语言不适合写复杂文档。
    jakwings
        31
    jakwings  
    OP
       2014-03-05 13:44:33 +08:00
    @soli 没有最好只有更好嘛,反正 Markdown 的变种多数是为了适应特定平台而作的,尤其是评论系统。
    Tink
        32
    Tink  
       2014-03-05 14:21:08 +08:00 via iPad   ❤️ 1
    急需图片尺寸定义,要纯md实现
    terrytowne
        33
    terrytowne  
       2014-03-05 16:46:32 +08:00   ❤️ 1
    @Tink 安装imagemagick
    convert example.png -resize 200x100 example.png
    jakwings
        34
    jakwings  
    OP
       2014-03-05 17:11:40 +08:00
    @Tink 不知道内嵌 HTML 算不算纯 Markdown 。<img src="url" style="width:100px;height=100px">
    MForever78
        35
    MForever78  
       2014-03-05 21:07:49 +08:00   ❤️ 1
    @jakwings 关于<img>会被<p>再次包起来... 这个确实会困扰啊,如果 p 有 text-indent ,而 img 又作了一个 margin: auto... 那样图片就会因为偏移而不是在正中间,还要用 CSS 再特殊处理一下,烦。
    jakwings
        36
    jakwings  
    OP
       2014-03-05 22:24:42 +08:00
    @MForever78 刚才我试了一下,图片要用 margin: auto 来居中,就要应用 display: block ,然而 block elements 是不会应用 text-indent 属性的。
    http://jsfiddle.net/ioioio/w9VZ9/
    Tink
        37
    Tink  
       2014-03-05 22:37:37 +08:00 via iPad   ❤️ 1
    @jakwings 当然不算啊,我的意思是,很简单的用 ![]()外加一个参数就能完成图片定位和尺寸定义
    jakwings
        38
    jakwings  
    OP
       2014-03-05 23:04:13 +08:00
    @Tink 我打算添加尺寸定义,至于定位功能,由于图片默认是属于段落 <p> 而不是独立的,因此左中右对齐或者浮动定位比较无意义。元素定位功能已经有点超出 Markdown 这类标记语言该有的功能了。
    jakwings
        39
    jakwings  
    OP
       2014-03-05 23:09:39 +08:00
    @Tink 或者干脆将图片插入功能独立于段落,不再用于行内文本会比较好,只是还不知道该用什么语法才不至于和图片 ID 的定义混淆。
    SoloCompany
        40
    SoloCompany  
       2014-03-06 01:49:26 +08:00
    @gdm +1 这个真的是很不爽,但是我从来不使用,要换行只能强行加空行了
    SoloCompany
        41
    SoloCompany  
       2014-03-06 01:53:25 +08:00
    @jakwings thanks, 怎么我看过的文档似乎都没提到过这种用法呢
    另外我测试了下
    `<http://foo.com>`
    或者
    <`http://foo.com`>
    都没法实现 URL 的格式化

    如果用 wiki markup
    {{[http://foo.com]}}
    就可以了

    这个真心的觉得不如 wiki 方便
    jakwings
        42
    jakwings  
    OP
       2014-03-06 02:01:29 +08:00
    @SoloCompany 你是要纯文本还是自动添加链接的 URL ?若是要链接,去掉左引号。自动链接是 Markdown 原生支持的语法。
    Wiki 用的语法其实是方便 wiki 的各个页面之间的联系而设计的,不会简单到哪里去的。不过 Wiki 系统都挺适合写博的,因为可以轻松地手动联系自己的各篇文章。

    自动用 <br> 换行的功能我已经在自己设计中的语言的转换工具实现了。其实段落 <p> 才是正确的分行方式,行距可以用 CSS 修改的,实在是不明白为什么对紧凑的内容这么喜爱呢。
    SoloCompany
        43
    SoloCompany  
       2014-03-06 02:42:48 +08:00 via iPad
    @jakwings 我是想添加URL并且用等宽显示,md 好像不会自动添加链接啊,所以才很纠结

    换行和分段的问题这个显然是md设计失误,我觉得wiki markup合理的多,换行自动保留,如果连续超过两个换行就分段
    jakwings
        44
    jakwings  
    OP
       2014-03-06 03:23:58 +08:00
    @SoloCompany URL 本来就可能够长了,还用等宽字体……的确要重复写链接了,不过用链接 ID 来引用看起来会比较干净。

    换行我不认为是 md 的设计失误,只能说是一种风格吧,因为 Markdown 是支持 Lazy Syntax 的,作者也是个喜欢邮件使用固定宽度内容的人,比较偏向英文使用者。只能怪当时作者没考虑过非拼音语言使用者的感受吧。
    hzlzh
        45
    hzlzh  
       2014-03-06 09:55:36 +08:00   ❤️ 1
    你要找的是不是这个:1MarkDown - 团队统一书写规范,我之前写过。
    https://github.com/hzlzh/1MarkDown
    darkbill
        46
    darkbill  
       2014-03-06 10:35:38 +08:00   ❤️ 1
    @strak47 如果是要居中的话,写一段latex语句放在preamble中就可以了。
    举例如下:
    \titleformat{\section}{}{\thesection}{}{%
    \centering\Huge\bfseries
    }[] %这是居中显示标题,用Huge级别的字号,以及粗体显示。

    如果使用pandoc的话,把上面的话存成一个文件header.latex,在格式转换的时候 pandoc -H header.latex <正文文件> 即可。
    jakwings
        47
    jakwings  
    OP
       2014-03-06 12:07:32 +08:00
    @hzlzh 不是的。另外,那份文档挺多关于空白行分隔的说明似乎描述和示例不完全符合,我看了源文件了。
    SoloCompany
        48
    SoloCompany  
       2014-03-06 15:39:22 +08:00
    回去看了下文档,貌似 <> 是给 email 嵌入用的,还真没想到过也可以用来嵌入 URL
    这个还真是有点绕,为什么不直接支持 (url) 或者 [url] 或者 [](url) 呢
    非得逼着人写 [url](url)
    虽然我已经慢慢习惯用 id 引用了,但即使有了 id 引用也无法实现简单的 URL 嵌入需求
    jakwings
        49
    jakwings  
    OP
       2014-03-06 15:48:09 +08:00
    @SoloCompany ()是常用来附加说明文本的,不应该单独成为标记,[](url) 可能意味着不包括链接文本,没用 [url] 而是 <url> ,我也不知道为什么。
    <> 的官方说明在这里:http://daringfireball.net/projects/markdown/syntax/#autolink
    yukirock
        50
    yukirock  
       2014-03-17 18:14:34 +08:00
    @jakwings

    > 其实让 text-indent 影响图片没什么不好,因为假如文本不是溢出分出多行的话,图片处于段落边界之外还是挺难看的,又得特地给图片加缩进等级。

    我不太了解你描述的是什么样式,如果可以的话,方便举例吗?

    p>img 的问题在于,图片的左边界是与首行缩进齐平,换言之如果正常布局的话,左边的边距会大于右边。即使是居中放置也是如此。

    分段的两种方法,其一缩进,其二增加段间距,的确如果用后一种的话就没有这个问题,但这并没有解决问题。相反,从语法上避免生成 p>img,我认为是更好的做法。

    再细分下来的话,即使是图片也有两种类型。其一是大片的插图,其二是行间图片,如图片格式的颜文字或字库中没有、需要用图片呈现的字符。现有的标记语言对后者可以轻松加愉快的搞定,而前者从逻辑上并不是段落的一部分,也不应当独占一个段落。

    > 用标记符号的长度来指示层级,其实在视觉上并不明显,内容多了便看不清楚了。另外也一般来说也不必太多缩进层级吧?缩进三层最少用 6 个空格便可以了。

    我一直认为把缩进作为语法是不恰当的,且不说 tab 和空格的选择,对于可以处理格式的编辑器来说,缩进的逻辑结构非常不稳定。或者说前面标记层级的字符至少不应该用 \s。

    而这个和缩进多少层级并没有多少联系。如果一个系统设计得很糟糕,它有可能在情况简单时坏掉,也的确有更大的可能在复杂的情况下坏掉。但是「因为在简单的情况下不容易坏所以无所谓」的话,我认为这是在隐瞒问题。
    jakwings
        51
    jakwings  
    OP
       2014-03-17 19:24:33 +08:00
    @yukirock
    > p>img 的问题在于,图片的左边界是与首行缩进齐平,换言之如果正常布局的话,左边的边距会大于右边。即使是居中放置也是如此。

    我之前试过了,图片这种 inline-block 元素竟然没有应用文字的 text-indent ,直接靠左对齐了。而为图片应用 display:block 和 margin:auto 进行居中时,也会忽略 text-indent 。所以假如要左对齐的话,若要配合行首缩进,还得添加 CSS 为图片进行缩进。

    我也为我的 Strictdown 语言添加了表示单独的图片的语法了。行内图片的确还是挺有用的。

    > 我一直认为把缩进作为语法是不恰当的,且不说 tab 和空格的选择,对于可以处理格式的编辑器来说,缩进的逻辑结构非常不稳定。或者说前面标记层级的字符至少不应该用 \s。

    其实我干脆支持用空格而不是 tab ,因为 tab 的呈现在各种编辑器上不确定。用空格缩进的话,可能真的不太适合制作自动格式化辅助工具,不过我认为应该先把可读性问题解决,一般情况下缩进也不需要缩进多少个字符。

    缩进层级增加会增加哪方面的不稳定性呢?而且在深度缩进时有没有在折腾一般人不会添加的复杂内容?
    而缩进导致的内容边界问题,可以用一个简单的分界标记来解决,而且这种情况也不会很常见。
    jakwings
        52
    jakwings  
    OP
       2014-03-17 19:32:49 +08:00
    @yukirock 啊,貌似我之前的测试结果有点问题。重新测试了一下: http://jsfiddle.net/y9nfP/
    结果是 text-indent 只影响不居中的图片。
    yukirock
        53
    yukirock  
       2014-03-17 20:00:04 +08:00
    > 我之前试过了,图片这种 inline-block 元素竟然没有应用文字的 text-indent ,直接靠左对齐了。而为图片应用 display:block 和 margin:auto 进行居中时,也会忽略 text-indent 。所以假如要左对齐的话,若要配合行首缩进,还得添加 CSS 为图片进行缩进。

    http://jsfiddle.net/yukirock/RSH2d/1/

    > 缩进层级增加会增加哪方面的不稳定性呢?而且在深度缩进时有没有在折腾一般人不会添加的复杂内容?

    自动处理缩进的编辑器(如 vim 的 =)会无从区分行首的 \s 到底是语法还是单纯的格式。如果误用这些自动工具的话很容易把排好的缩进打乱。我的意见是,不管用什么符号,要能和惯用的缩进符号区分开来,不致引起歧义。

    再者「一般人不会添加的复杂内容」,不正是开发者应当考虑的方面嘛。
    jakwings
        54
    jakwings  
    OP
       2014-03-17 20:30:38 +08:00
    @yukirock 不知道 52 楼你有没有看到。

    之所以会说添加复杂内容,我设计的 Strictdown 语言是支持的:
    https://github.com/jakwings/strictdown
    不过编辑器插件要不要完全迁就就要看实用性质了,添加复杂内容本来就已经快要超出这类语言的极限了。

    你说的歧义问题,只是和编辑器的格式化功能或者代码高亮功能有关的。

    自动缩进功能其实真的不需要太精确,缩进不对了,手动敲几个空格就能矫正了。代码高亮插件也可以稍微降低一下精度,不会严重影响视觉效果。像 Vim 这种纯文本编辑工具要实现自动格式化编辑还是比较难的,用网页在线编辑器会更容易实现(例如通过特殊按键组合退出当前编辑的文本块)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1181 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:26 · PVG 02:26 · LAX 11:26 · JFK 14:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.