Sphinx、reStructuredText 显示/隐藏代码片段
我一直在使用 Sphinx 和 reStructuredText。
在我的文档中,有一些很长的代码片段。我希望能够将它们默认隐藏,并使用一个小“显示/隐藏”按钮来展开它们(示例)。
有没有标准的方法来做到这一点?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
您不需要自定义主题。使用内置指令
container
,它允许您将自定义 css 类添加到块并覆盖现有主题以添加一些 javascript 来添加显示/隐藏功能。这是
_templates/page.html
:这是
_static/custom.css
:这已添加到
conf.py
:现在您可以显示/隐藏一段代码。
我在这里使用非常相似的东西进行练习:https://training.plone。 org/5/mastering-plone/about_mastering.html#exercises
You don't need a custom theme. Use the built-in directive
container
that allows you to add custom css-classes to blocks and override the existsting theme to add some javascript to add the show/hide-functionality.This is
_templates/page.html
:This is
_static/custom.css
:This is added to
conf.py
:Now you can show/hide a block of code.
I use something very similar for exercises here: https://training.plone.org/5/mastering-plone/about_mastering.html#exercises
您可以使用内置的 HTML 可折叠
details
标记将代码包装在两个原始 HTML 指令中生成:
You can use the built-in HTML collapsible
details
tag by wrapping the code in two raw HTML directivesProduces:
有一个非常简单的扩展提供了该功能:https://github.com/scopatz/hiddencode
对我来说效果很好。
There is a very simplistic extension providing exactly that feature: https://github.com/scopatz/hiddencode
It works rather well for me.
我认为最简单的方法是创建一个自定义 Sphinx 主题,在其中告诉某些 html 元素具有此功能。一点 JQuery 在这里会有很大帮助。
但是,如果您希望能够在 reStructuredText 标记中指定这一点,那么您需要
这会需要更多的工作,但会给你更多的灵活性。
I think the easiest way to do this would be to create a custom Sphinx theme in which you tell certain html elements to have this functionality. A little JQuery would go a long way here.
If, however you want to be able to specify this in your reStructuredText markup, you would need to either
This would be a bit more work, but would give you more flexibility.
云 sphinx 主题具有提供可切换部分的自定义指令
html-toggle
。引用他们的网页:这里是他们的测试演示页面的链接。
The cloud sphinx theme has custom directive
html-toggle
that provides toggleable sections. To quote from their web page:Here is a link to their test demonstration page.
sphinx-togglebutton
看起来已经制作了一个新的 sphinx 扩展既然这个问题已经得到解答,就这样做吧。
运行:
pip install sphinx-togglebutton
添加到
conf.py
第一个源文件中:
sphinx-togglebutton
Looks like a new sphinx extension has been made to do just this since this question has been answered.
Run:
pip install sphinx-togglebutton
Add to
conf.py
In rst source file:
由于上述方法似乎都不适合我,因此我最终解决了这个问题:
在源目录中创建一个包含以下内容的文件
substitutions.rst
:<前><代码>.. |toggleStart|原始:: html
<详情>
<总结>折叠块的标题
.. |切换结束|原始:: html
>
在要使用的每个文件的开头添加以下行添加可折叠块
<前><代码>..include::替换.rst
现在,只需使用即可使部分代码可折叠:
<前><代码>|toggleStart|
您想要折叠的文本
..代码块:: python
x=1
|切换结束|
since none of the above methods seem to work for me, here's how I solved it in the end:
create a file
substitutions.rst
in your source-directory with the following content:add the following line at the beginning of every file you want to use add collapsible blocks
now, to make a part of the code collapsible simply use:
另一种选择是 sphinx-design 扩展中的下拉指令。从文档中:
extensions
列表中的conf.py
dropdown
指令:Another option is the dropdown directive in the sphinx-design extension. From the docs:
conf.py
in theextensions
listdropdown
directive in your rst file:TL;DR
您可以使用 jsphinx 来实现此目的。检查演示/示例。
literalinclude
: 演示/示例。文档中对方法进行了很好的解释。
相对于现有解决方案的优势:
TL;DR
You can use jsphinx for this. Check the demo/examples.
literalinclude
: demo/example.code-block
: demo/example.Methodology is well explained in the documentation.
Advantages over existing solutions:
自版本 0.20 (2023-05-09) 起,Docutils HTML5 编写器支持 详细披露元素。
产生
Since version 0.20 (2023-05-09), the Docutils HTML5 writer supports details disclosure elements.
produces