【问题标题】:More consistent Sphinx themes更一致的狮身人面像主题
【发布时间】:2024-01-07 16:49:01
【问题描述】:

考虑以下函数

# in mymodule.py:

def myfunc(num,mystring):
    """
    replicates a string

    :param num: a positive integer
    :param mystring: a string
    :return: string concatenated with itself num times

    :Example:
        >>> num = 3
        >>> mystring = "lol"
        >>> myfunc(num, mystring)
        "lollollol"
    """
    return num*mystring

如果我使用 Sphinx 从我的文档字符串生成代码,它看起来像这样(这次我使用默认主题 haikurstconf.py 文件中没有太多更改):

是否有任何主题 - 或任何其他解决方法 - 可以解决我用颜色指示的问题?

我尝试了不同的方法,但都没有奏效,但我无法获得 1.-4 的任何分数。上班。

编辑 我的想法是我不想编辑 HTML,这很麻烦。我只想对我的 Sphinx docs 目录中的 conf.pyindex.rst 文件进行更改,以便进行上述更改。

【问题讨论】:

  • 您到底尝试了什么?一个非常普遍的答案是可以使用 CSS 自定义主题的外观和感觉。见*.com/q/57415129/407651
  • @mzjn 我尝试了其他主题,例如guzzle_sphinx_theme,但我尝试的主题都没有执行我希望的更改。我还用谷歌搜索了 conf.py 和 index.rst 文件中是否有任何选项可以进行更改但找不到太多(但我确信一定有这样的变化)。另请参阅我的编辑。
  • 您是否尝试过任何 CSS 自定义?我怀疑为了解决您的所有问题,仅靠 CSS 可能还不够。但我们必须从某个地方开始。你在这里问了四个问题。通常最好一次问一个不同的问题。
  • @mzjn 问题是我不想在 Sphinx 生成的 HTML 文件中编辑 CSS - 这似乎是您要我做的。请看我的编辑。我想在 Sphinx 中进行更改。
  • 您不应该编辑生成的 HTML 或 CSS。您需要使用您的更改在 Sphinx 项目中创建一个自定义 CSS 文件。请参阅我在第一条评论中链接到的问题。

标签: python themes python-sphinx docstring


【解决方案1】:

单独的 CSS 自定义无法解决这个问题。即使您可以使用::before::after 之后的选择器,我认为JavaScript 更适合处理这个问题。

您可以使用 conf.py 中的 html_js_files 选项添加自定义 Javascript 文件。使用它应该可以满足您的要求 1、2 和 3。

#  ...

html_js_files = ['custom.js']

# ...

如果您在 conf.py 中使用上述代码,那么您的 custom.js 文件应位于以下位置

docs/
  _static/
    custom.css
    custom.js
  _templates/
  index.rst
  api.rst
  ...

一个例子

添加之前custom.js

我的 custom.js 文件

window.onload = function () {
    // Change 'Parameters' to 'Arguments' 
    first_dt_elements = document.querySelectorAll('dl.field-list > dt:first-child');
    for(let i = 0; i< first_dt_elements.length; i++){
        first_dt_elements[i].innerText="Arguments";
    }
    // arguments same font and typeface etc..
    dl_methods = document.querySelectorAll('dl.function, dl.method');
    parameter_texts = []
    for(let i = 0; i< dl_methods.length; i++){
        params = [];
        param_elems=dl_methods[i].querySelectorAll('.sig-param');
        for (let j = 0; j< param_elems.length; j++){
            params.push(param_elems[j].innerText);
        }
        for( let k=0; k<params.length; k++){
            str = dl_methods[i].innerHTML;
            dl_methods[i].innerHTML= str.replace(
                RegExp(params[k], "g"), 
                '<span style="color:red;font-family:monospace;font-style:normal;">'
                + params[k] +
                '</span>'
            );
        }
    }
}

再次构建html后

关于可选要求4

Sphinx 使用 pygments 来突出显示语法。如果对此不满意,可以使用HighlightjsPrismjsGoogle code prettify 等。通过html_js_files 下载并包含它们。但这些也是 语法 荧光笔。高亮变量的语义荧光笔可用于 python,但我还没有听说过任何可以与 Sphinx 一起使用的东西。

注意

  • 我正在使用Alabaster theme。但是这个想法应该适用于大多数主题。但是,您必须根据您的主题编写 custom.js 文件。
  • 我的 custom.js 文件非常简单,并没有考虑到所有可能性。

【讨论】:

  • dayummm,这是一个很长的答案! +1 只是为了努力。现在让我通读一遍,看看它是如何工作的。
  • 好的,我测试过了。由于某种原因,它似乎不起作用,它没有在 javascript 代码中出现。我将custom.*文件放在_built文件夹中(顺便说一句,如果custom.css是空的,我为什么还要创建它),添加conf.py这一行,make html编译它没有问题,但没有出现任何变化。你知道我做错了什么吗?
  • 作为一个小问题,你知道如何禁用参数名称的粗体字,name_strdefault 当它们出现在图片中的“参数”附近时,参数名称到处都是一模一样?我不知道 javascript,我在您的代码中找不到任何似乎引用粗体字的选项。另外,您是否知道(一句话)您提到的 ::before / ::after 选择器有效,以便我可以使用它们以防我需要它们来自定义您的文件?网上似乎没有很多关于这个的好文档。)
  • (P.S. 我已授予赏金,否则它将过期,但请告诉我如何让 javascript 自定义工作。)
  • @mzjn 这在雪花石膏主题中对我有用。我不知道 OP 是否能够在更改 custom.js 文件后最终使其正常工作。如果有人不熟悉css和Js,那将是非常困难的。
最近更新 更多