可以在 Markdown 中合并表格行吗?

215

有没有办法在Markdown文件中,像ReadMe.md文件一样,在表格的某一列中创建合并的行?

就像这样:

table


我很抱歉,Markdown并不是一个功能丰富的HTML/文本编辑器。它只是一个简单的编辑器。 - H. Pauwelyn
@H.Pauwelyn,你知道有没有其他解决方案吗?我能把Excel文件嵌入其中吗? - dev-masih
不,就像我说的那样,这是一个简单的事情。我建议使用代码块。它以三个反引号开头和结尾,或者每一行都以四个空格开头。 - H. Pauwelyn
也许你可以在Markdown文件中尝试使用原始HTML表格? - mb21
1
@dev-masih,回答你关于另一种解决方案的问题。你可以使用AsciiDoc代替Markdown。GitHub现在支持它。你的AsciiDoc语法表格:[cols="^,^,^"] \n|=== \n|层1 |层2 |层3 \n \n.4+.^|L1名称 .2+.^|L2名称A |L3名称A \n|L3名称B \n.2+.^|L2名称B |L3名称C \n|L3名称D \n \n|===。请将所有\n替换为行分隔符。 - Peter
7个回答

150
不,使用GitHub风格的Markdown不可能实现此功能。根据规范(已加重说明):

表格的其余行的单元格数量可以有所不同。如果单元格数量比标题行中的单元格数量少,则会插入空单元格。如果单元格数量多,则多余的单元格将被忽略

当然,您可以始终退回到原始的HTML代码。事实上,GitHub在其白名单中包含了rowspan(及colspan)属性。

<table>
    <thead>
        <tr>
            <th>Layer 1</th>
            <th>Layer 2</th>
            <th>Layer 3</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td rowspan=4>L1 Name</td>
            <td rowspan=2>L2 Name A</td>
            <td>L3 Name A</td>
        </tr>
        <tr>
            <td>L3 Name B</td>
        </tr>
        <tr>
            <td rowspan=2>L2 Name B</td>
            <td>L3 Name C</td>
        </tr>
        <tr>
            <td>L3 Name D</td>
        </tr>
    </tbody>
</table>

请在https://jsfiddle.net/7h89y55r/上自行尝试。


这很完美,结果正是我想要的。 - dev-masih
9
使用原始 HTML 有一个权衡。它更加灵活,但你不能在 HTML 标签内使用 markdown 语法。 <table><tr><td>This is not emphasized text: *the asterisks* will be rendered literally.</td></tr></table> - chharvey
太好了!这里还有一个HTML表格生成器,可以轻松制作表格:https://www.tablesgenerator.com/html_tables - Niko Pasanen
2
@chharvey 好的,具体来说,在GFM中你是可以这样做的,只需要在HTML和Markdown内容之间加入空行即可。我为了这条评论而转义了它们:<td>\n\n*markdown* [foo]\n\n</td> https://github.github.com/gfm/#example-157 - Kroltan

41
标准的commonmark不支持表格,并且没有提及或推荐任何特定的表格扩展(截至2018-03的最新修订版永久链接)。您的问题并没有特别询问Github-flavored Markdown(GFM),但是GFM基于带有表格扩展的commonmark,该扩展不支持此功能。 MultiMarkdown自v5起以与Michael Fortin为PHP Markdown Extra所做的相同方式支持这些类型的表格(文档永久链接)。
|             |          Grouping           ||
First Header  | Second Header | Third Header |
 ------------ | :-----------: | -----------: |
Content       |          *Long Cell*        ||
Content       |   **Cell**    |         Cell |

New section   |     More      |         Data |
And more      | With an escaped '\|'         ||  
[Prototype table]

转化为表格

我通常使用markdown-it(VSCode内置的markdown和我的Ghost博客都使用它),它只支持Github风格的表格,但有人为这些表格创建了一个扩展程序(markdown-it-multimd-table)。最终,你有多种选择。


16
如果您正在使用Jekyll,并且想要支持表格单元格对齐、合并等功能,我认为下面我写的内容可以帮助您更轻松地完成。

jekyll-spaceship - 一个Jekyll插件,提供强大的支持,包括表格、mathjax、plantuml、mermaid、video、youtube、emoji、vimeo、dailymotion等。

https://github.com/jeffreytse/jekyll-spaceship

目前,提供以下扩展功能:
  • 跨多列的单元格
  • 跨多行的单元格
  • 单元格文本可分别对齐
  • 表头不是必需的
  • 分组表头行或数据行

table code

上述代码将被解析为:

html table


3
非常遗憾,它变得难以阅读 :( - Mariusz Jamro
这是一个扩展方法,尽量保持可读性。当然,您也可以使用HTML编写表格,这取决于您的偏好以及此扩展的利弊选择。 - J.T.
1
可能需要添加一个免责声明,说明您是作者。但我认为它不仅难以阅读和学习,而且MathJax和图像的顺序也有问题。 - somebody
只是想告诉大家,如果他们想在自己的 GitHub 页面博客中使用这个插件,默认情况下是无法工作的。这是一个自定义插件,在我的 GitHub 页面上并没有起作用。默认情况下,GitHub 页面不允许应用自定义插件。我猜测可能有一些解决方法,但我还没有尝试过。除此之外,这个插件在我的本地环境中运行得很好。 - undefined

7

我在评论区回答了OP提出的关于替代解决方案的问题,但由于评论被压缩成了一行,所以我将其添加到这里作为答案,以便正确显示格式。

你可以使用AsciiDoc而不是Markdown。GitHub现在支持它。只需使用README.adoc而不是README.md。你的AsciiDoc语法表格如下:

[cols="^.^,^.^,^.^"]
|===
|Layer1 |Layer2 |Layer3

.4+|L1 Name .2+|L2 Name A |L3 Name A
|L3 Name B
.2+|L2 Name B |L3 Name C
|L3 Name D
|===

4

3
在标准的Markdown中不支持此功能,但有些解决方案可以支持它。之前提到的Multimarkdown是其中之一,但我想推荐另一个在线Markdown编辑器,它支持此功能:μr²编辑器
它支持行和列合并,并且还可以从输出生成漂亮的PDF文档。例如:
|               |          Grouping             ||         Grouping 2         ||  Not Grouped    |
| First Header  | Second Header | Third Header   | Forth Header | Fifth Header | Sixth Header    |
| ------------- | :-----------: | -------------: | :----------: | :----------: | --------------- |
| Tall Cell     |          *Long Cell*          ||         *Long Long Cell*                    |||
| ^^            |   **Bold**    | 1. first item  | *Italic*     | 3. third item | + first point  |\
| ^^            |               | 1. second item |              | 1. forth item | + second point |

| New section   |     More      |         Data   | ... - -- --- |||
| And more      | With an escaped \|          || "Try 'quotes' in quotes "         |||
[Compicated table]

将呈现为:

输入图像描述


1

我正在使用Postman记录API,并发现您可以通过在| |分隔符中插入HTML来混合行自述文件.md注释,以创建更加强大的设计。我认为对于其他使用标记语言(如GitHub)的平台也是一样的,您可以尝试一下看看是否有效。

以下示例将一个表格嵌套在另一个表格单元格中:

       | Field  | Description |  Optional | Default |
       | ------ | ----------- | --------- | ------- |
       | manual_entry_indicator | no: is not is allow manual entry <br /> yes: is manual entry enabled| yes | no |
       | amounts | json object containing all transaction amounts <br /> <br /> <table> <tr> <td> Subfield </td> <td> Description </td> <td> Optional </td> <td> Default </td> </tr> <tr> <td> tip </td>  <td> transaction tip amount </td> <td> yes </td> <td> NA </td> </tr> <tr> <td> total </td> <td> equal to Base  Amount + Base amount for  Reduced State Tax + City Tax + State Tax + Reduced State Tax + Tip or Cash back </td> <td> no </td> <td> NA </td> </tr> <tr> <td> cashback </td> <td> cash back amount </td> <td> yes </td> <td> NA </td> </tr> <tr> <td> state_tax </td> <td> State tax amount </td> <td> yes </td> <td> NA </td> </tr> <tr> <td> city_tax </td> <td> City tax amount </td> <td> yes </td> <td> NA </td> </tr> <tr> <td> reduced_tax </td> <td> Reduced state tax amount </td> <td> yes </td> <td> NA </td> </tr> <tr> <td> base_reduced_tax </td> <td> Reduced state tax base amount </td> <td> yes </td> <td> NA </td> </tr> </table> | no | NA |

will be rendered like this


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接