如何使用sphinx分配案例的标签中心?

时间:2018-06-09 07:41:05

标签: python-sphinx mathjax

我使用sphinx编写方程式。我的代码如下所示:

.. math::
  :label: eq1

  \begin{eqnarray}
  \begin{cases}
  a_{11}x_{1} + \dots + a_{1m}x_{m} = b_1\\
  a_{21}x_{1} + \dots + a_{2m}x_{m} = b_2
  \end{cases}
  \end{eqnarray}

这会在第一行的右侧显示标签(1),但我会将其分配给此{cases}的中心,即在第一行和第二行之间。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

这个问题似乎主要与MathJax的使用有关。

通过一些实验我发现它理解\smash并且使用它提供了希望的标签放置。但也许有一些MathJax设置会避免使用这个\smash。除\smash之外,仅适用于两个或三个"案例"。

我已将\smash方法移至第二部分,其中也解释了其缺点。实际上,我已经找到了半满意的CSS方法。

无论如何,请不要在那里使用eqnarray

基于CSS的方法

使用这些内容在源库中创建文件_static/custom.css

.MathJax_Display {
    transform: translate(0%,-50%) translate(0%,8px);
}

div.math {
    transform: translate(0%,50%);
}

在conf.py结束时添加:

if html_theme != 'alabaster':
    def setup(app):
        app.add_stylesheet('custom.css') 

例如,我使用'classic'主题获取此内容:

enter image description here

这也适用于'agogo''alabaster'主题,但对于只有一行定位的方程式可能需要进行一些微调。

在RTD主题的情况下,它根本不起作用。

支持可能取决于浏览器。

\smash接近

Text before.

.. math::
   :label: eq1

   \smash{\begin{cases}
   a_{11}x_{1} + \dots + a_{1m}x_{m} &= b_1\\
   a_{21}x_{1} + \dots + a_{2m}x_{m} &= b_2
   \end{cases}}

Text after.

我来自make html(经典主题)

enter image description here

conf.py包含

extensions = ['sphinx.ext.mathjax',
]

html_theme = 'classic'

顺便说一下,eqnarray不是很好的标记。如果您使用它,您应该使用:nowrap:选项。请参阅Sphinx doc

注意当然cases的使用情况可疑,因为您的示例是方程之一。我添加了&,但间距是cases适合的间距,这肯定不是预期的间距。所以删除它们。

这是标记,不会滥用cases环境:

Text before.

.. math::
   :label: eq1

   \smash{\left\{\begin{aligned}
   a_{11}x_{1} + \dots + a_{1m}x_{m} &= b_1\\
   a_{21}x_{1} + \dots + a_{2m}x_{m} &= b_2
   \end{aligned}\right.}

Text after.

CAVEAT 粉碎技巧仅适用于两个(也许是三个)方程式,即使在MathJax中也是如此。

enter image description here