繁体   English   中英

如何配置 Sphinx 以有条件地排除某些页面?

[英]How can I configure Sphinx to conditionally exclude some pages?

使用 Sphinx 生成文档时,我希望能够生成我的文档的两个版本:一个包含所有内容,一个只包含一组特定的页面。 实现这一目标的最佳方法是什么?

我可以编写一个构建脚本来移动文件来实现这一点,但是如果有一种方法可以告诉 sphinx 在特定构建期间排除或包含特定文档,那就太好了。

也许我的答案来得有点晚,但我设法通过配置文件中的排除模式使用 Sphinx 做到了这一点。

我的文档部分用于用户,部分用于管理员。
有些页面的文件名包含admin一词,和您一样,我想构建两个版本:一个包含所有内容(管理文档),另一个包含所有“管理”页面(用户文档)。

要排除所有子文件夹中的所有“管理”页面,您必须将此行添加到配置文件conf.py

exclude_patterns = ['**/*admin*']

那是容易的部分。

我的问题是我不知道如何在不使用两个不同配置文件的情况下运行两次构建,一次使用排除模式,另一次不使用排除模式。

我自己没有找到解决方案,所以我在 SO 上问了一个问题并得到了答案

  • 配置文件只是一个 Python 文件,可以包含 Python 代码,这些代码将在构建时执行。
  • 您可以通过可以在配置文件中查询的命令行传递参数(“ 标签”)。

所以我的配置文件中有这个排除模式:

exclude_patterns = ['**/*admin*']
if tags.has('adminmode'):
    exclude_patterns = []

现在我可以在不传递任何内容的情况下运行构建,这将排除“admin”文件:

make clean
make html

⇒ 这是我的用户文档

...我可以设置“adminmode”标签,它不会排除任何东西:
(Windows 命令行语法)

set SPHINXOPTS=-t adminmode
make clean
make html

⇒ 这是我的管理文档。


奖金:

我可以使用相同的标签来忽略页面上的某些特定内容,方法是包括基于标签的内容

例子:

regular documentation
=====================

This paragraph and its headline will always be visible.

.. only:: adminmode

        secret admin stuff
        ------------------

        This paragraph will be visible in the admin docs only.


This will (again) always be visible.

onlyifconfig指令可用于在页面内应用条件。

似乎没有任何简单的方法可以使用条件来完全排除整个页面(.rst 文件)。

以下(在 index.rst 中)在生成 HTML 输出时排除了 index.html 中 toctree 中对 doc2.html 的引用:

.. toctree::
   doc1.rst

.. only:: latex

   .. toctree::
      doc2.rst

但这并没有真正起作用。 仍然会生成 doc2.html 文件,当 doc1.html 是当前主题时,可以通过“下一个主题”链接访问它。

sphinx.ext.ifconfig怎么 您在conf.py文件中设置配置值。 由于这是一个常规的 Python 文件,您可以根据需要使您的包含标准变得智能和自动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM