在某个地方添加 JavaScript 脚本标记,以便它适用于 Sphinx 中的每个文件

问题描述 投票:0回答:5

我正在使用 Sphinx 写一些笔记。我在笔记中使用 Mathjax 数学扩展。数学的默认大小比我想要的要大一点。在 Mathjax 页面上,我发现可以通过将以下脚本添加到 HTML 文件来更改该大小。

MathJax.Hub.Config({
  "HTML-CSS": {scale: 90}
});

因此,我尝试在

.rst
文件中添加以下内容:

.. raw:: html

    <script type="text/javascript" >
        MathJax.Hub.Config({
            "HTML-CSS": {
                scale: 90
            }
        });
    </script>

==========
Objective
==========

To change math size \\( \\alpha \\).

上面的内容对于特定

.rst
文件中的数学运算非常有效。但我想对属于同一个 Sphinx 文档的许多不同的
.rst
文件执行此操作。是否可以在不将上述脚本添加到每个
.rst
文件中的情况下执行此操作?

javascript python python-sphinx
5个回答
22
投票

这可以通过模板来完成:

  1. 在Sphinx项目目录中创建一个名为

    templates
    的文件夹。

  2. 在conf.py中添加

    templates_path = ["templates"]
    
  3. templates
    目录中,创建一个名为
    layout.html
    的文件,其中包含以下内容:

    {% extends "!layout.html" %}
    
    {%- block extrahead %} 
     <script type="text/javascript">
           MathJax.Hub.Config({
               "HTML-CSS": {
                   scale: 90
               }
           });
      </script>      
    {% endblock %}
    

<script>
元素将包含在每个生成的 HTML 页面的
<head>
中。

extrahead
模板块默认为空。有关详细信息,请参阅 Sphinx 模板文档


5
投票

如果您想避免更改模板,您可以从 Sphinx 项目的 conf.py

 中的 
add_js_file() 函数调用 Sphinx 的
setup()

# conf.py

# ... other settings ...

def setup(app):
    # (create a setup() function if you don't already have one;
    # or add to the existing setup() ...)
    app.add_js_file("mathjax-config.js")

在 _static 源目录中创建文件“mathjax-config.js”。 (检查 conf.py

html_static_path
设置以验证静态目录,或者根据需要定义一个。)Sphinx 会在构建期间将其复制到输出目录中。

还有一个针对 css 文件的

add_css_file()
方法。它们都可以采用静态源目录的相对路径,或外部资源的完整 url。

在 Sphinx v1.8 之前,这些函数被称为

add_javascript()
add_stylesheet()

在 Sphinx v3.0 或更高版本中,有一个更简单的方法,可以避免需要额外的 JS 文件。


3
投票

另一种方法:

在覆盖的 layout.html 文件中使用

script_files
设置。


2
投票

在 Sphinx 3.0 及更高版本中,添加 JavaScript 配置简短片段的最简单方法是在 conf.py 设置函数中调用

app.add_js_file(None, body="...JS code...")
。示例:

# In your Sphinx project's conf.py:

# 1. Add whatever JS code you need as a string constant.
#    (This example is from the original question.)
MATHJAX_CONFIG_JS = """
MathJax.Hub.Config({
  "HTML-CSS": {scale: 90}
});
"""

# 2. Create a setup() function if you don't already have one.
#    (If you do, just add to your existing setup() function.)
def setup(app):
    # 3. Tell Sphinx to add your JS code. Sphinx will insert
    #    the `body` into the html inside a <script> tag:
    app.add_js_file(None, body=MATHJAX_CONFIG_JS)

使用这种方法,您不需要创建单独的静态 JS 文件。

(Sphinx 3.0 中添加了

body
参数;在早期版本中,您可以 仍然使用
add_js_file()
与静态 JS 文件 - 请参阅我的 之前的回答。对于任何比 一个简短的配置片段,无论如何使用外部文件可能会更好。)


1
投票

仅配置

conf.py
的最简单解决方案可能是使用 MathJax 扩展的配置值
mathjax_config
(自
1.8
起可用)。
mathjax_config
的值传递给
MathJax.Hub.Config()

根据您的具体情况,将以下内容添加到

conf.py

mathjax_config = {
    "HTML-CSS": {"scale": 90},
}
© www.soinside.com 2019 - 2024. All rights reserved.