可以满足问题中给出的确切规范,但并非没有需要解决的重大问题。
有什么方法可以让我的目录树在 Overview 部分之后,但位于 Thingamajigs 部分下?
通过在Overview 部分内放置一个目录树,您将把该目录树的所有“条目”(.rst 文件)放在该部分内,因此在部分层次结构中低于该级别。
However, a document must be consistent in its use of section titles: once a hierarchy of title styles is established, sections must use that hierarchy.
在其假装部分之外调整目录树会影响 1)“导航”、2)“编号”和 3)“深度”。
解决方法的第一步:
您可以使用 :hidden: 选项在您想要的位置声明一个目录树 - 在 Thingamajigs 部分内 - 从而使 1)、2) 和 3) 按预期工作。 Sphinx 将处理第一个 toctree 声明中的条目,因此之后在 Overview 中声明的 toctree 不会影响 1)、2) 和 3),因为 .rst 条目已被处理。
结果:
对应thingamajigs.rst:
Thingamajigs
============
.. toctree::
:hidden:
foo
bar
baz
Overview
++++++++
Thingamajigs are fun
.. toctree::
foo
bar
baz
以上内容完全符合问题中指定的问题。
(Sphinx 会发出警告,因为同一个 .rst 文件包含在多个目录树中,但它们不仅仅是警告。)
解决方法的第二步:
然而,现在来了一个惊喜!如果您再上一层,到包含以thingamajigs.rst 作为条目的目录树的.rst,您会发现:hidden: 目录树没有呈现,而是可见目录树“就地”呈现(乱序):
结果:
对应level_2_toctree.rst:
***************
Level_2_toctree
***************
.. toctree::
fill_tree1
fill_tree2
fill_tree3
fill_tree4
thingamajigs
虽然 1)、2) 和 3) 都有效(就保留其功能的目录树而言),但这给我们留下了一个问题:修复父目录树中的渲染顺序。显而易见的解决方案是在项目符号列表中“按原样”重复原始较低级别的目录树,并添加针对这些部分的引用:
结果:
对应level_2_toctree.rst:
***************
Level_2_toctree
***************
.. toctree::
fill_tree1
fill_tree2
fill_tree3
fill_tree4
.. toctree::
:hidden:
thingamajigs
- :ref:`5.5. Thingamajigs <target_thingamajigs>`
.. toctree::
foo
bar
baz
- :ref:`5.5.4. Item Overview <target>`
.. toctree::
foo2
bar2
请注意,您必须将hyperlink targets 添加到原始thingamajigs.rst。
.. _target_thingamajigs:
Thingamajigs
============
.. toctree::
:hidden:
foo
bar
baz
.. _target:
Overview
++++++++
Thingamajigs are fun
.. toctree::
foo
bar
baz
解决方法的第三步:
但这还有一个问题,HTML 主题可能对项目符号列表和目录树有不同的 CSS 样式,两者都作为不同的 HTML 元素处理(检查源代码)。
一种解决方案是wrap the block including the 2 delimiting references in a reST directive(一个容器),它允许自定义样式以使块与剩余的目录树“混合”。但是,您必须在提升 toctree 链的每一步传播这种定制。
这确实提供了作为“概念证明” 的通用解决方案,用于将“可移植目录树” 放置在上下文之外。两个主要缺点是必须手动重构超链接编号,以及自定义 CSS 所需的开销和专业知识。
没有更多的解决方法:
考虑Sphinx toctree directive 和reStructuredText contents directive 是非常不同的。虽然toctree 的重点是将.rst 文件链接在一起,但contents 指令的目的是提供一个很好的.rst 文件(或它所在的部分)的目录。
通过在upper index 和其文档的相应section 之间来回单击来尝试contents 指令的有用:backlinks: 选项。
“理想情况下”避免变通办法的最佳方法是为手头的工作使用正确的工具。
作为上述两个补充的第三个选项是使用由hyperlink targets 组成的bullet list。它很灵活,允许混合包含项目符号列表的.rst 文件的内部和外部链接。此外,它不会干扰 toctree 或 contents 指令的自动化——这取决于部分。解决方法的第二步包括两个项目符号列表的基本元素。
我正在尝试学习如何管理与其他内容位于同一文件中的目录树元素。
查看官方 Python 文档one example 中的toctrees 或another example,您会看到"Flat, Simple, Special cases..." from the Zen of Python 的反映。我见过的最重要的文档chose simple toctree layouts。
在不更改指定表示的情况下,最有效的解决方案是使用 Overview 内的超链接目标引用的项目符号列表而不是目录树。