Как выделить метку центра кейса с помощью сфинкса? - PullRequest
0 голосов
/ 09 июня 2018

Я пишу уравнения, используя 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 голосов
/ 09 июня 2018

Этот вопрос, по-видимому, относится главным образом к использованию 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' theme:

enter image description here

Это также работает с темами 'agogo' и 'alabaster', но может потребоваться некоторая тонкая настройка для уравнений с позицией, состоящей только из одной строки, напримерthe label.

В случае 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

...