求关于 Markdown 或类似标记语言的任何吐槽、建议、个人使用风格说明。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jakwings
V2EX    Markdown

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

  •  
  •   jakwings 2014-03-04 21:19:24 +08:00 10763 次点击
    这是一个创建于 4237 天前的主题,其中的信息可能已经有所发展或是发生改变。
    对回复者的第一条回复必送感谢!
    最好让这个主题成为 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
    &nbp;  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  
    PRO
       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  
    PRO
       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  
    PRO
       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     Solana     2924 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 12:53 PVG 20:53 LAX 05:53 JFK 08:53
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86