不同的toctree标题和文档标题,仅在文档源中指定

gal*_*tte 6 restructuredtext python-sphinx

在toctree中插入文档时,显示的链接是文档的主标题.所以当我这样做时:

.. toctree::
   materials/diffuse
   materials/glossy
   materials/specular
Run Code Online (Sandbox Code Playgroud)

我明白了:

物料

  • 漫射材料
  • 有光泽的材料
  • 镜面材料

"材料"这个词在toctree中显然是多余的,但在文档标题中很重要,以便更好地理解.

RST允许我写这个:

.. toctree::
   Diffuse<materials/diffuse>
   Glossy<materials/glossy>
   Specular<materials/specular>
Run Code Online (Sandbox Code Playgroud)

但我不喜欢这样,因为重命名文档需要更新索引toctree,链接更新是我从MediaWiki转到Sphinx的原因.此外,这会禁用在toctree中使用:glob:和wildcards

问题:有没有办法在叶子文档本身中指定一个toctree标题,例如在"diffuse.rst"中作为元属性?

谢谢!

csi*_*pls 1

从概念上讲,CSS 内容属性适用于此。假设你的标题是用<h1>元素渲染的,你会想要这样的东西:

.. raw:: html

   <style>
      h1:after {
         content: " Material";
      }
   </style>
Run Code Online (Sandbox Code Playgroud)

<style>...</style>块正在做这项工作。您的文档保留单字标题(漫反射、光泽、镜面),CSS 在渲染时添加“材质”。因此,您的页面具有您想要的标题,并且您的目录树没有每个项目的冗余“材料”。但是,您希望该块出现在“材质”部分的页面上 - 您不能将其添加到主 css 文件中,否则它将影响所有<h1>元素。不幸的是,据我所知,Sphinx 没有一种<style>在页面部分正确创建块的机制。<head>因此,要使用这种 CSS 技术,您必须接受将其放入.. raw:: html页面上某处所示的指令中的完整技巧。你把它放在文档中的什么位置并不重要——你选择的任何位置都会生成无效的 html,但会呈现你想要的内容:你的 toctree 标签不会包含“material”;您的页面标题将会。