mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
sphinx.ext.mathbase: Refactor LaTeX output
This commit is contained in:
@@ -29,23 +29,38 @@ class eqref(nodes.Inline, nodes.TextElement):
|
||||
|
||||
|
||||
def wrap_displaymath(math, label, numbering):
|
||||
parts = math.split('\n\n')
|
||||
ret = []
|
||||
for part in parts:
|
||||
if not part.strip():
|
||||
continue
|
||||
ret.append('\\!\\begin{split}%s\\end{split}\\\\\n' % part)
|
||||
if not ret:
|
||||
return ''
|
||||
if label is not None or numbering:
|
||||
env_begin = r'\begin{align}'
|
||||
if label is not None:
|
||||
env_begin += r'\label{%s}' % label
|
||||
env_end = r'\end{align}'
|
||||
def is_equation(part):
|
||||
return part.strip()
|
||||
|
||||
if label is None:
|
||||
labeldef = ''
|
||||
else:
|
||||
env_begin = r'\begin{align*}'
|
||||
env_end = r'\end{align*}'
|
||||
return '%s\\begin{aligned}\n%s\\end{aligned}%s' % (env_begin, ''.join(ret), env_end)
|
||||
labeldef = r'\label{%s}' % label
|
||||
numbering = True
|
||||
|
||||
parts = filter(is_equation, math.split('\n\n'))
|
||||
equations = []
|
||||
if len(parts) == 0:
|
||||
return ''
|
||||
elif len(parts) == 1:
|
||||
if numbering:
|
||||
begin = r'\begin{equation}' + labeldef
|
||||
end = r'\end{equation}'
|
||||
else:
|
||||
begin = r'\begin{equation*}' + labeldef
|
||||
end = r'\end{equation*}'
|
||||
equations.append('\\begin{split}%s\\end{split}\n' % parts[0])
|
||||
else:
|
||||
if numbering:
|
||||
begin = r'\begin{align}%s\begin{aligned}' % labeldef
|
||||
end = r'\end{aligned}\end{align}'
|
||||
else:
|
||||
begin = r'\begin{align*}%s\begin{aligned}' % labeldef
|
||||
end = r'\end{aligned}\end{align*}'
|
||||
for part in parts:
|
||||
equations.append('\\!%s\\\\\n' % part)
|
||||
|
||||
return '%s\n%s%s' % (begin, ''.join(equations), end)
|
||||
|
||||
|
||||
def math_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
|
||||
|
||||
@@ -72,21 +72,21 @@ def test_math_number_all_latex(app, status, warning):
|
||||
|
||||
content = (app.outdir / 'test.tex').text()
|
||||
print content
|
||||
macro = (r'\\begin{align\*}\\begin{aligned}\s*'
|
||||
r'\\!\\begin{split}a\^2\+b\^2=c\^2\\end{split}\\\\\s*'
|
||||
r'\\end{aligned}\\end{align\*}')
|
||||
macro = (r'\\begin{equation\*}\s*'
|
||||
r'\\begin{split}a\^2\+b\^2=c\^2\\end{split}\s*'
|
||||
r'\\end{equation\*}')
|
||||
assert re.search(macro, content, re.S)
|
||||
|
||||
macro = r'Inline \\\(E=mc\^2\\\)'
|
||||
assert re.search(macro, content, re.S)
|
||||
|
||||
macro = (r'\\begin{align\*}\\begin{aligned}\s*'
|
||||
r'\\!\\begin{split}e\^{i\\pi}\+1=0\\end{split}\\\\\s+'
|
||||
r'\\end{aligned}\\end{align\*}')
|
||||
macro = (r'\\begin{equation\*}\s*'
|
||||
r'\\begin{split}e\^{i\\pi}\+1=0\\end{split}\s+'
|
||||
r'\\end{equation\*}')
|
||||
assert re.search(macro, content, re.S)
|
||||
|
||||
macro = (r'\\begin{align\*}\\begin{aligned}\s*'
|
||||
r'\\!\\begin{split}S &= \\pi r\^2\\end{split}\\\\\s*'
|
||||
r'\\!\\begin{split}V &= \\frac\{4}\{3} \\pi r\^3\\end{split}\\\\\s*'
|
||||
r'\\!S &= \\pi r\^2\\\\\s*'
|
||||
r'\\!V &= \\frac\{4}\{3} \\pi r\^3\\\\\s*'
|
||||
r'\\end{aligned}\\end{align\*}')
|
||||
assert re.search(macro, content, re.S)
|
||||
|
||||
Reference in New Issue
Block a user