From 540400635add4bf7e656c9d6e7d8ef3285fd6d68 Mon Sep 17 00:00:00 2001
From: Hong Xu
Date: Sat, 9 Jan 2016 16:55:56 -0800
Subject: [PATCH 1/2] math: Add math_number_all to enforce numbering all
displayed math.
---
doc/ext/math.rst | 7 +++++++
sphinx/ext/imgmath.py | 3 ++-
sphinx/ext/mathbase.py | 15 ++++++++++-----
sphinx/ext/pngmath.py | 3 ++-
4 files changed, 21 insertions(+), 7 deletions(-)
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:
From a75bf5af3c8af884db1c71d38de78e074901ae71 Mon Sep 17 00:00:00 2001
From: Hong Xu
Date: Sat, 9 Jan 2016 17:33:51 -0800
Subject: [PATCH 2/2] Refactor the tests of math extensions.
---
tests/roots/test-ext-imgmath/index.rst | 6 -----
.../conf.py | 1 -
tests/roots/test-ext-math/index.rst | 10 ++++++++
.../{test_ext_imgmath.py => test_ext_math.py} | 25 ++++++++++++++-----
4 files changed, 29 insertions(+), 13 deletions(-)
delete mode 100644 tests/roots/test-ext-imgmath/index.rst
rename tests/roots/{test-ext-imgmath => test-ext-math}/conf.py (56%)
create mode 100644 tests/roots/test-ext-math/index.rst
rename tests/{test_ext_imgmath.py => test_ext_math.py} (63%)
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)