当前位置: 首页 > 面试题库 >

如何为reStructuredText,Sphinx,ReadTheDocs等设置自定义样式?

顾池暝
2023-03-14
问题内容

我想用自己的自定义样式扩展 SphinxReadTheDocs 使用的主题。

为了做到这一点,最好的方法是什么?


问题答案:

假设条件

您的RTD文档集具有以下结构:

  • (根路径)
    • (一些其他与本讨论无关的东西)
    • _static/
    • _templates/
    • conf.py

您也正在使用sphinx-buildsphinx-autobuild使用默认主题在本地进行构建,但是部署的服务器可能会使用sphinx-rtd- theme

用例:Hatnotes

对于此插图,我将展示如何为“ hatnotes”创建自定义样式,该概念在MediaWiki文档中非常普遍,并且与RST中的构造 大致
相对应admonition。您可以应用此处显示的内容来创建任何自定义CSS并将其包含在文档集中。

第1步:创建自定义CSS

自定义CSS文件应该放在_static/目录下的某个位置,因为在这里构建过程和脚本会找到它。我鼓励使用css/子目录,因为您可能还需要添加其他自定义设置,例如JavaScript文件。

创建您的自定义CSS文件并将其放在此目录中。将样式规范写为要在构建中使用的主题中可能已经存在的任何内容的覆盖。另外,不要假设您的样式是否会覆盖主题中的现有样式,因为您无法保证何时将样式与默认样式相关联。

这是我自定义的Hatnotes CSS。我将其保存在_static/css/hatnotes.css

.hatnote
{
    border-color: #c8c8c8 ;
    border-style: solid ;
    border-width: 1px ;
    font-size: x-small ;
    font-style: italic ;
    margin-left: auto ;
    margin-right: auto ;
    padding: 3px 2em ;
}
.hatnote-gray { background-color: #e8e8e8 ; color: #000000 ; }
.hatnote-yellow { background-color: #ffffe8 ; color: #000000 ; }
.hatnote-red { background-color: #ffe8e8 ; color: #000000 ; }
.hatnote-icon { height: 16px ; width: 16px ; }

步骤2:将样式添加到模板

对于默认主题,只需创建一个模板即可覆盖默认主题,layout.html以将自定义CSS添加到布局中。模板的使用在sphinxdoc.org上有详细记录。在覆盖模板中,只需在css- files变量(数组)中添加自定义CSS文件的附加列表即可。

这是我的模板,其中添加了hatnotes CSS。我将此另存为_templates/layout.html

{% extends "!layout.html" %}
{% set css_files = css_files + [ "_static/css/hatnotes.css" ] %}

这就是默认主题所需要做的。对于Sphinx / RTD主题,还有一个附加步骤,您可以在其中…

步骤3:将样式表添加到主题

对于Sphinx /
RTD主题,您的模板将被忽略。不必使用模板机制,您必须在conf.py文件中添加一个函数,以将CSS文件添加到应用程序的主题中。在conf文件设置html_theme属性的位置附近添加以下内容:

def setup(app):
  app.add_stylesheet( "css/hatnotes.css" )

请注意,这一次,_static/路径的前面没有任何东西。该add_stylesheet()函数假定路径的那一部分。

完成用例

既然您已经为默认主题和Sphinx / RTD主题设置了自定义样式,则实际上可以在文档中使用它们。

遵循在MediaWiki中将股票备忘定义为“模板”的通常范例(抱歉,与Sphinx和RTD中的模板不同),我建立了一个includes/目录,用于存储所有备忘。

以下是使用自定义样式信息构造帽子注释的方法。该文件是includes/hatnotes/stub-article.rst

.. container:: hatnote hatnote-gray

   |stub| This article is a stub. Please improve the docs by expanding it.

.. |stub| image:: /images/icons/stub.png
          :class: hatnote-icon

在这里,我们将“ stub”帽子说明设置为具有默认的hatnote样式(灰色背景),并使用“ stub”图标作为嵌入式图像,并将hatnote- icon样式应用于该图像。

现在,我们可以将该文件用作文档中包含的资源。

Foo Article
===========

.. include:: /includes/hatnotes/stub-article.rst

Blah blah I haven't written this article yet.

无论您使用的是本地默认主题还是Sphinx /
RTD主题,都会通过设置_templates/layout.html模板和conf.py脚本以包含您放置在_static/目录下的自定义CSS文件的方式添加已添加样式的hatnote

结束状态

您的文档存储库现在包含以下内容:

  • (根路径)
    • _static/
    • css/
      • (自定义CSS文件…)
    • _templates/
    • layout.html(将自定义CSS添加到默认布局)
    • conf.py(具有将自定义CSS添加到应用主题的新功能)


 类似资料:
  • 我正在使用MPAndroidChart显示一个相对简单的条形图。 有2件事我需要设置,我不知道如何自定义: > 我需要为每个条添加文本,而不是简单的值,每个条本身也有样式。 在每个条的顶部,我需要放置各种类型的可绘制材料来覆盖它的宽度(例如一个条中高度为2dp的蓝色,或另一个条上高度相同的黄色渐变)。 下面是我需要做的一个演示: > 我知道我也可以通过使用添加图标,但这似乎不适用于应该使用整个条形

  • 问题内容: 我正在使用Spring 3.1,并且想使用新的缓存功能。然后,我尝试: 但是我没有找到配置自定义KeyGenerator的方法。任何想法? 问题答案: 好的,我只是找到一种方法来做… 如您所见,我使用AnnotationDrivenCacheBeanDefinitionParser,将配置放入xml中,并且可以::完成! 编辑: 对于Spring> 3.2,可以使用实现CachingC

  • 在我的应用程序中,我使用了主题。全息和主题。全息。光没有任何问题。当全息主题被使用,我点击一个对话首选项/列表首选项,弹出的对话框也是全息主题。全息也一样。光。但是当首选项活动与我的自定义主题,这是从全息派生。光,所有对话都以全息为主题。光。我想我错过了一些东西在我的主题。有人能帮帮我吗?非常感谢! 这是我的主题代码:

  • 我想为我的项目将文本组件(dayTitle)的字体样式更改为自定义字体。对于设置预定义字体ex:-BOLD,Harmony OS平台允许用户以这种方式设置预定义字体- 有什么办法,我可以设置自定义字体到我的文本组件(一天标题)?

  • 默认情况下,npm本地安装会在当前目录下的中结束,但我希望它安装到其他目录下的中,例如。我该怎么做呢?

  • 我正在研究一个项目,其中上下文和会话由ThreadLocal使用ThreadPoolExecutor安全地管理(信息从线程传递到ThreadPoolExecutor内部的另一个线程)。 我们有: ThreadPoolExecutor:它实现beforeExecute和afterExecute方法行为,以确保信息从线程传递到另一个线程,并在afterExecutre方法中清除线程上下文。 Threa