diff --git a/doc/ext/math.rst b/doc/ext/math.rst index 081027b92..61fa0ca83 100644 --- a/doc/ext/math.rst +++ b/doc/ext/math.rst @@ -28,6 +28,13 @@ Keep in mind that when you put math markup in **Python docstrings** read by :mod:`autodoc `, you either have to double all backslashes, or use Python raw strings (``r"raw"``). +:mod:`.mathbase` provides the following config values: + +.. confval:: math_number_all + + Set this option to ``True`` if you want all displayed math to be numbered. + The default is ``False``. + :mod:`.mathbase` defines these new markup elements: .. rst:role:: math diff --git a/sphinx/ext/imgmath.py b/sphinx/ext/imgmath.py index 461cba17e..40a9c1402 100644 --- a/sphinx/ext/imgmath.py +++ b/sphinx/ext/imgmath.py @@ -242,7 +242,8 @@ def html_visit_displaymath(self, node): if node['nowrap']: latex = node['latex'] else: - latex = wrap_displaymath(node['latex'], None) + latex = wrap_displaymath(node['latex'], None, + self.builder.config.math_number_all) try: fname, depth = render_math(self, latex) except MathExtError as exc: diff --git a/sphinx/ext/mathbase.py b/sphinx/ext/mathbase.py index 5673fcf25..6dc1c7323 100644 --- a/sphinx/ext/mathbase.py +++ b/sphinx/ext/mathbase.py @@ -28,7 +28,7 @@ class eqref(nodes.Inline, nodes.TextElement): pass -def wrap_displaymath(math, label): +def wrap_displaymath(math, label, numbering): parts = math.split('\n\n') ret = [] for i, part in enumerate(parts): @@ -38,7 +38,9 @@ def wrap_displaymath(math, label): ret.append('\\begin{split}%s\\end{split}' % part + (label and '\\label{'+label+'}' or '')) else: - ret.append('\\begin{split}%s\\end{split}\\notag' % part) + ret.append(r'\begin{split}%s\end{split}' % part) + if not numbering: + ret.append(r'\notag') if not ret: return '' return '\\begin{gather}\n' + '\\\\'.join(ret) + '\n\\end{gather}' @@ -116,7 +118,8 @@ def latex_visit_displaymath(self, node): self.body.append(node['latex']) else: label = node['label'] and node['docname'] + '-' + node['label'] or None - self.body.append(wrap_displaymath(node['latex'], label)) + self.body.append(wrap_displaymath(node['latex'], label, + self.builder.config.math_number_all)) raise nodes.SkipNode @@ -194,10 +197,11 @@ def number_equations(app, doctree, docname): num = 0 numbers = {} for node in doctree.traverse(displaymath): - if node['label'] is not None: + if node['label'] is not None or app.config.math_number_all: num += 1 node['number'] = num - numbers[node['label']] = num + if node['label'] is not None: + numbers[node['label']] = num else: node['number'] = None for node in doctree.traverse(eqref): @@ -208,6 +212,7 @@ def number_equations(app, doctree, docname): def setup_math(app, htmlinlinevisitors, htmldisplayvisitors): + app.add_config_value('math_number_all', False, 'html') app.add_node(math, override=True, latex=(latex_visit_math, None), text=(text_visit_math, None), diff --git a/sphinx/ext/pngmath.py b/sphinx/ext/pngmath.py index 74ab29666..a2801bd1f 100644 --- a/sphinx/ext/pngmath.py +++ b/sphinx/ext/pngmath.py @@ -213,7 +213,8 @@ def html_visit_displaymath(self, node): if node['nowrap']: latex = node['latex'] else: - latex = wrap_displaymath(node['latex'], None) + latex = wrap_displaymath(node['latex'], None, + self.builder.config.math_number_all) try: fname, depth = render_math(self, latex) except MathExtError as exc: diff --git a/tests/roots/test-ext-imgmath/index.rst b/tests/roots/test-ext-imgmath/index.rst deleted file mode 100644 index f7780a422..000000000 --- a/tests/roots/test-ext-imgmath/index.rst +++ /dev/null @@ -1,6 +0,0 @@ -Test imgmath -============ - -.. math:: a^2+b^2=c^2 - -Inline :math:`E=mc^2` diff --git a/tests/roots/test-ext-imgmath/conf.py b/tests/roots/test-ext-math/conf.py similarity index 56% rename from tests/roots/test-ext-imgmath/conf.py rename to tests/roots/test-ext-math/conf.py index 3f3e2a783..f81c30bc4 100644 --- a/tests/roots/test-ext-imgmath/conf.py +++ b/tests/roots/test-ext-math/conf.py @@ -1,4 +1,3 @@ # -*- coding: utf-8 -*- -extensions = ['sphinx.ext.imgmath'] master_doc = 'index' diff --git a/tests/roots/test-ext-math/index.rst b/tests/roots/test-ext-math/index.rst new file mode 100644 index 000000000..491edda95 --- /dev/null +++ b/tests/roots/test-ext-math/index.rst @@ -0,0 +1,10 @@ +Test Math +========= + +.. math:: a^2+b^2=c^2 + +Inline :math:`E=mc^2` + +Second math + +.. math:: e^{i\pi}+1=0 diff --git a/tests/test_ext_imgmath.py b/tests/test_ext_math.py similarity index 63% rename from tests/test_ext_imgmath.py rename to tests/test_ext_math.py index 2e28d2baa..84bca95a3 100644 --- a/tests/test_ext_imgmath.py +++ b/tests/test_ext_math.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- """ - test_ext_imgmath - ~~~~~~~~~~~~~~~~ + test_ext_math + ~~~~~~~~~~~~~ - Test sphinx.ext.imgmath extension. + Test math extensions. :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. @@ -14,7 +14,8 @@ import re from util import with_app, SkipTest -@with_app('html', testroot='ext-imgmath') +@with_app('html', testroot='ext-math', + confoverrides = {'extensions': ['sphinx.ext.imgmath']}) def test_imgmath_png(app, status, warning): app.builder.build_all() if "LaTeX command 'latex' cannot be run" in warning.getvalue(): @@ -27,8 +28,9 @@ def test_imgmath_png(app, status, warning): '\s*alt="a\^2\+b\^2=c\^2"/>\s*

\s*') assert re.search(html, content, re.S) -@with_app('html', testroot='ext-imgmath', - confoverrides={'imgmath_image_format': 'svg'}) +@with_app('html', testroot='ext-math', + confoverrides={'extensions': ['sphinx.ext.imgmath'], + 'imgmath_image_format': 'svg'}) def test_imgmath_svg(app, status, warning): app.builder.build_all() if "LaTeX command 'latex' cannot be run" in warning.getvalue(): @@ -40,3 +42,14 @@ def test_imgmath_svg(app, status, warning): html = ('
\s*

\s*\s*

\s*
') assert re.search(html, content, re.S) + +@with_app('html', testroot='ext-math', + confoverrides={'math_number_all': True, + 'extensions': ['sphinx.ext.mathjax']}) +def test_math_number_all(app, status, warning): + app.builder.build_all() + + content = (app.outdir / 'index.html').text() + html = (r'
\s*' + r'\(1\)\\\[a\^2\+b\^2=c\^2\\\]
') + assert re.search(html, content, re.S)