在Markdown表格中换行长行

25
我的目标是编写易于阅读的纯文本形式和HTML形式的文档文件。
问题在于使用Markdown表格。例如,我有一个包含长字符串的表格:
| Name      | Description                                                                                                                  |
|-----------|------------------------------------------------------------------------------------------------------------------------------|
| some_name | Very very very long description for some_name property that should be easy to read even in plain text form even in html form |

这个Markdown生成普通的HTML,但由于行太长,无法以纯文本形式阅读。
如果我写了这样的东西:
| Name      | Description                    |
|-----------|--------------------------------|
| some_name | Very very very long description|
|           | for some_name property that    |
|           | should be easy to read even in |
|           | plain text form even in html   |
|           | form                           |
|-----------|--------------------------------|

然后它很容易阅读,但生成的HTML呈现效果不美观。

有没有办法在Markdown表格中换行长行?

1个回答

32

这取决于你使用的Markdown实现。

例如,Pandoc的multiline_tablesgrid_tables都支持多行单元格,但更流行的pipe_tables不支持。请注意,默认情况下没有启用这些选项,但必须通过选项明确地开启,或作为Markdown变体的一部分开启。让我们逐个看一下:

multiline_tables

这些表格使用空行来分隔每一行。

------------------------------------------
Name       Description
---------- -------------------------------
some_name  Very very very long description
           for some_name property that
           should be easy to read even in
           plain text form even in html
           form  

other_name A second row
------------------------------------------

我知道有至少两个关于multiline_tables的问题:

  1. 它们只受Pandoc支持。因此,如果您想让其他Markdown实现处理您的Markdown,则不能使用它们。
  2. 编辑单元格内的多行文本可能会很麻烦,因为您需要在文本编辑器中手动换行。

grib_tables

这些本质上是Emacs table mode的克隆和restructuredtext's grid tables更严格的实现。

+------------+--------------------------------+
| Name       | Description                    |
+============+================================+
| some_name  | Very very very long description|
|            | for some_name property that    |
|            | should be easy to read even in |
|            | plain text form even in html   |
|            | form                           |
+------------+--------------------------------+
| other_name | A second row                   |
+------------+--------------------------------+

每一行都由-+字符的组合分隔。
grid_tables存在以下已知问题:
  1. 它没有得到任何其他Markdown实现(我所知道的)的支持。
  2. 虽然在emacs中得到了很好的编辑器支持,但你必须使用emacs,这可能是好事,也可能不是好事。

pipe_tables

除了Pandoc之外,这些表格被许多实现支持,包括PHP Markdown ExtraMultiMarkdownGitHub Flavored MarkdownPython-Markdown*Kramdown等。
| Name       | Description                                                                                                                  |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------- |
| some_name  | Very very very long description for some_name property that should be easy to read even in plain text form even in html form |
| other_name | A second row                                                                                                                 |

请注意,语法不提供定义一行何时结束和另一行何时开始的方式(与其他类型的表不同)。由于无法定义行之间的分隔,因此它只能在每行是自己的行的情况下工作。因此,一行不能包含多行文本。
最后,正如Pandoc的文档所述:
{{由于管道表示列边界,因此列不需要垂直对齐。}}
既然如此,在文本编辑器中以这种方式格式化表格更容易:
| Name       | Description  |
| ---------- | ------------ |
| some_name  | Very very very long description for some_name property that should be easy to read even in plain text form even in html form |
| other_name | A second row |

那确实有所帮助,并且消除了手动换行的需要。长行不是理想选择,但由于广泛支持,它仍然是大多数用户的最佳选择。
MultiMarkdown 的表格文档提出了一个有趣的观察(原文强调):
MultiMarkdown 表格支持旨在处理大多数人的大多数表格; 它并不涵盖所有人的所有表格。 如果您需要复杂的表格,则需要手动创建或使用专为输出格式设计的工具。 但是,如果您发现 MultiMarkdown 表格过于受限,请考虑是否表格确实是最佳方法。

* 全部披露:我是Python-Markdown的维护者


非常感谢您提供这个杰出的答案,真的非常棒! - Yavanosta

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