在记录交互式会话时如何更改 Sphinx 显示的提示?

Posted

技术标签:

【中文标题】在记录交互式会话时如何更改 Sphinx 显示的提示?【英文标题】:How can I change the prompt displayed by Sphinx when documenting interactive sessions? 【发布时间】:2012-05-09 17:56:53 【问题描述】:

我目前正在使用Sphinx 记录一个混合语言项目,因此该文档不仅包含 Python 中的交互式会话示例,还包含 bash 和 Windows 命令行以及 MATLAB 和其他解释器中的交互式会话示例.虽然 Pygments 可以很好地突出显示所有内容,但到目前为止,我在文档中包含的所有交互式会话都显示在 html 输出中,前面有 Python 提示符>>>。例如,在记录 bash 会话时,如何将该提示更改为 $


编辑澄清:

如 Sphinx 手册中所述,在“Showing code examples”下,Sphinx 文档的 ReST 源可以包含如下代码:

>>> # python code here
>>> print "foo"
foo

然后,此代码将转换为 Python 标准库文档中 the documentation of argparse 中演示的标记,将 >>> 之后的代码显示为突出显示的 sn-p。虽然很明显可以简单地用其他提示字符排版未突出显示的块,但我想知道如何将>>> 以外的提示与the argparse example 中显示的交互式提示样式结合起来。

【问题讨论】:

我不确定我是否遵循。 Sphinx 不会在 HTML 输出中添加提示;提示应该在文档源中。您能否向我们展示一个示例交互式 bash 会话的 reST 源代码? 如果我向 ReST 源添加一些看起来像 bash 会话的传统文本表示的东西,每行以 $ 开头,那么 Sphinx 将不会以代码样式排版。另一方面,如果我用>>> 开始一个ReST 源代码行,那么它会这样做,遵守最新的.. highlight:: 指令。也就是说,HTML 输出仍然包含>>>,没有明显的方式来改变提示的排版。 【参考方案1】:

您可以使用 $ 作为 bash sn-ps 的提示符,但如果您想很好地突出显示输出,则不能将其用于 Python。

>>> 被识别为交互式 Python 提示符。但是使用另一个提示是行不通的。 The documentation 说:“普通 Python 代码只有在可解析时才会突出显示”,类似于

$ import sys 

>> import sys 

不能像 Python 一样解析。

可以使用扩展使 Sphinx 接受其他 Python 提示。 ipython directive 是一个例子(未经我测试)。


这些例子很适合我:

.. code-block:: bash

   $ pwd
   /home
   $ echo TEST
   TEST

.. code-block:: python

   >>> import sys
   >>> print "X"
   X

以下产生相同的格式和突出显示:

.. highlight:: bash

::

   $ pwd
   /home
   $ echo TEST
   TEST

.. highlight:: python

::

   >>> import sys
   >>> print "X"
   X

对于 Python 交互式会话,实际上不需要额外的标记(除非最新的 .. highlight:: 指令的目标不是 python)。 Sphinx 自动识别>>>

>>> import sys
>>> print "X"
X

在没有任何提示的情况下,代码必须在代码块(或文字块)中才能正确格式化:

.. code-block:: python

   import sys
   print "X"

【讨论】:

以上是关于在记录交互式会话时如何更改 Sphinx 显示的提示?的主要内容,如果未能解决你的问题,请参考以下文章

sphinx - 如何更改文档样式表

制作PDF时如何替换Sphinx封面

Thinking Sphinx - 显示来自协会的正确记录

Python-Sphinx中Toctree的多个级别

Sphinx、reStructuredText 显示/隐藏代码片段

创建交互式登录会话