【问题标题】:Extra blank lines in a Sphinx unordered listSphinx 无序列表中的额外空行
【发布时间】:2013-06-03 09:46:07
【问题描述】:

我正在使用 Sphinx 为我的项目编写文档,并发现下面给出的两个相似的 reStructuredText 段的呈现方式有所不同。

示例 1

Some text:

*  Item 0
*  Item 1
*  Item 2

   ::

       Some code
       Some code
       Some code
       Some code

   .. WARNING::
      Some text.

*  Item 3

示例 2

Some inline text:

*  Item 0
*  Item 1
*  Item 2

  ::                           <-- One less space before the :: marker

       Some code
       Some code
       Some code
       Some code

  .. WARNING::                 <-- One less space before the .. marker
      Some warning text.

*  Item 3

示例 1 在列表项 Item 0Item 1Item 2 之间产生了额外的空白,但第二个示例呈现时没有这个额外的间距。查看example 1example 2 的最终标记。这只发生在“基本”主题中。

如果我不想要示例 1 产生的额外间距,为什么我必须遵循我的第二个示例?

【问题讨论】:

  • 列表标记和列表项文本之间有两个空格。尝试使用* Item 0,而不是* Item 0。如果同时使用 reStructuredText 提取物获得输出的屏幕截图,并指出您所期望的以及为什么输出不是您想要的(“渲染好列表”并不是特别有用的描述),这将很有用。最后,我会写* Item 2::Item 2:: 之间没有换行符,为什么你有:: 单独一行?
  • @Chris,这里是example 1,这里是example 2。我喜欢在项目符号后给无序列表项目 2 个空格(因此它们的缩进与有序列表一样多),而且它不会改变渲染。关于孤独的::,这两种方式并没有让我有任何不同,我喜欢这个。
  • @Chris,当我说这些东西没有改变渲染时,这是错误的。在我处理这种特殊情况之前,它没有任何区别,它使我的渲染看起来像示例 1。另外请使用 Basic 主题,作为 Nature 主题没有显示我面临的问题。
  • 您在列表项的间距中看到的差异只是您链接到的网站上的一个主题的 CSS 样式问题。但是,您给出的两个示例之间存在语义差异:请参阅我的答案。

标签: python-sphinx restructuredtext


【解决方案1】:

从您的 cmets 看来,问题似乎在于http://rst.ninjs.org 上的 reStructuredText 的呈现以及它与一个特定的 CSS 主题的外观。这不是 reStructuredText 的真正问题。

忽略样式问题,您在两个示例之间看到两种不同行为的原因是因为这两个示例不同:第一个代码块是列表项Item 2 的一部分;在第二个示例中,代码块是 not,因此关闭了它上面的列表,Item 3 因此启动了一个新列表。

我们可以通过研究reStructuredText specification on bullet lists(重点是我的)来了解原因,

以“*”、“+”、“-”、“•”、“‣”或“⁃”开头,后跟空格的文本块是项目符号列表项(又名“无序列表”物品)。列表项正文必须左对齐并相对于项目符号缩进; 项目符号后面的文本决定缩进。

在您的第一个示例中,:: 与文本项目符号列表项的开头对齐,因此也是列表项正文的一部分。在第二个示例中,:: 与列表项文本不在同一标识级别,因此关闭列表并开始一个代码块(它不是列表项的子项)。如果我们比较 example 1example 2 生成的 HTML,这一点很明显。

要点是列表项中文本的开头定义了如果要添加到该列表项的正文中必须匹配的缩进级别。

【讨论】:

  • 我想我对正面和背面的意义太大了,我应该检查呈现的 HTML。您确实是对的,使用有序列表(而不是无序)向我展示了示例 2 中实际上有 2 个不同的列表。现在还有一件事我没有得到,在这个更新的 example 1 中,我添加了第二个无序列表。在第一个列表中,每个项目都包含在 &lt;p&gt; 标记中,而在第二个列表中,项目直接位于 &lt;li&gt; 标记内。
  • 看不到你在johnmacfarlane.net/pandoc/try上提到的内容,只有Item 2有段落标签。
  • 我了解,但我的 Sphinx 文档与 rst.ninjs.org 中的行为完全相同。你建议我做什么(除了破解主题 CSS)?
  • 如果您不喜欢 Sphinx 提供的默认样式,恐怕您将不得不编辑 CSS。不要仅仅为了调整文本的呈现方式而开始编写无语义的 reStructuredText,这可能会导致各种问题,尤其是在可维护性方面。查看 this SO answer 了解如何添加自定义 CSS 样式 - 只需添加一条规则以覆盖 li 元素的默认填充/边距。如果您需要帮助,我会问一个新问题。
  • 这绝对不是正确的行为(因为first 类应用于每个列表元素)。我在您的最后一条评论中使用margin: 0 !important;first class` 进行了工作
猜你喜欢
  • 2021-12-14
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
相关资源
最近更新 更多