Markdown:列表转换得不好

Omm*_*awn 8 markdown list pandoc

我正在尝试在 Markdown 中创建一个列表。正如我在一些文档中读到的,如果我编写以下 Markdown 代码:

My list
* first item
* second item
* third item

Not in the list
Run Code Online (Sandbox Code Playgroud)

我得到的结果与用 HTML 编写的结果相同:

My list
* first item
* second item
* third item

Not in the list
Run Code Online (Sandbox Code Playgroud)

我使用 Atom 作为编辑器及其 Markdown 预览器,一切正常,但是当我使用pandoc以下方式转换 Markdown 文件时:

pandoc test.md -o test.odt
Run Code Online (Sandbox Code Playgroud)

我得到的是这样的:

My list * first item * second item * third item
Not in the list
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

Way*_*lan 11

您的问题有两种可能的解决方案:

  1. 在段落和列表之间添加一个空行(如@melpomene 在评论中提到的)。

    My list
    
    * first item
    * second item
    * third item
    
    Not in the list
    
    Run Code Online (Sandbox Code Playgroud)
  2. 省略空行并告诉 Pandoc 使用commonmark作为输入格式而不是默认的markdown.

    pandoc -f commonmark -o test.odt test.md
    
    Run Code Online (Sandbox Code Playgroud)

“问题”是 Atom 编辑器使用 CommonMark 解析器,并且默认情况下,Pandoc 使用老式 Markdown 解析器,该解析器主要遵循这些规则和参考实现 ( markdown.pl)。事实上,Commonmark 规范明确承认了这种差异:

在 CommonMark 中,列表可以打断段落。也就是说,不需要空行来将段落与以下列表分开:

Foo
- bar
- baz

<p>Foo</p>
<ul>
<li>bar</li>
<li>baz</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

Markdown.pl不允许这样做,因为担心通过硬包装行中的数字触发列表:

The number of windows in my house is
14.  The number of doors is 6.
Run Code Online (Sandbox Code Playgroud)

如果您希望工具之间具有共同的行为,那么您只需使用遵循相同行为的工具。