如何在python-sphinx中创建方程末尾的数字?

it_*_*ure 4 equation python-sphinx

使用以下代码,我们可以创建每个最后包含数字的方程。

\documentclass[12pt]{article}
\usepackage{mathtools}
\begin{document}
\begin{align}
    100 + x &= y            \\    
    \frac{y}{x} &\ge 1.3    \\
    (100+x)-(100+x)z &= y 
\end{align}
\end{document}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

现在用 python-sphinx 编写它们。

.. math::

    \begin{align}
        100 + x &= y            \\    
        \frac{y}{x} &\ge 1.3    \\
        (100+x)-(100+x)z &= y 
    \end{align}
Run Code Online (Sandbox Code Playgroud)

用 编译后make html,我们得到下图:
在此处输入图片说明

您可以看到每行末尾没有数字。
如何在python-sphinx中每行末尾创建带有数字的相同方程?

elp*_*rup 5

正如@ilke444 所评论的,您可以添加\tag{1}到每一行的末尾。如果您需要参考某一特定行,您可以在行中添加标签。

 .. math::
   \begin{align}
        100 + x &= y    \label{a}   \tag{1}    \\    
        \frac{y}{x} &\ge 1.3 \label{b}  \tag{2}  \\
        (100+x)-(100+x)z &= y \label{c} \tag{3} 
   \end{align}
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明

所以你可以这样引用它:

refer it inline :math:`\ref{a}`

refer it for single line:

.. :math:: \ref{a}
Run Code Online (Sandbox Code Playgroud)

注意:标签必须是唯一的,否则将不会呈现输出。

更新:升级 sphinx 中的 mathjax 现在支持将自动编号行作为乳胶。

index.html_build目录中打开并更改 mathjax 脚本

<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
Run Code Online (Sandbox Code Playgroud)

将其更改为:

<script>
    window.MathJax = {
        tex: {
            tags: "ams"
        }
    };
</script>
<script
    type="text/javascript"
    id="MathJax-script"
    async
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"
></script>
Run Code Online (Sandbox Code Playgroud)

现在align块中的所有行都将自动编号。

相关文档:自动方程式编号

为什么python-sphinx会有这样的行为?

在 sphinx 中编号的源代码

Python-Sphinx整体处理每个数学块并为整个数学块分配编号。生成 html 时,它会忽略数学块内的编号,并将其留给数学渲染库(默认为MathJax)。

所以确实,问题是为什么 Mathjax 不支持 align 块中的自动编号行,所以你可以参考这个答案

如何编号和引用多线方程?

到目前为止,唯一的方法是在每一行中添加标签 :(,没有自动方式。


顺便提一句

如果您只想要整个数学块的一个标签

据我所知,python-sphinx为每个数学块提供了生成数字的选项(通过使用:label:

 .. math::
   \begin{align}
        100 + x &= y    \\    
        \frac{y}{x} &\ge 1.3  \\
        (100+x)-(100+x)z &= y 
   \end{align}
   :label: abc
Run Code Online (Sandbox Code Playgroud)

输出

在此处输入图片说明

标签,(2)因为序列号是由于其在整个文档中的位置而生成的。

你可以参考它

refer to it by :eq:`abc`
Run Code Online (Sandbox Code Playgroud)