Merge pull request #1752 from sphinx-doc/1719_numfig_format_was_ignored_on_latex

#1719 numfig_format was ignored on latex
This commit is contained in:
Takayuki SHIMIZUKAWA 2015-03-08 00:14:26 +09:00
commit 63b924cc32
3 changed files with 119 additions and 2 deletions

View File

@ -98,6 +98,7 @@ Bugs fixed
now renamed to ``div.literal-block-wrapper``.
* ``sphinx.util.pycompat`` has been restored in its backwards-compatibility;
slated for removal in Sphinx 1.4.
* #1719: LaTeX writer does not respect ``numref_format`` option in captions
Release 1.3b2 (released Dec 5, 2014)

View File

@ -43,6 +43,7 @@ HEADER = r'''%% Generated by Sphinx.
\usepackage{sphinx}
\usepackage{multirow}
%(usepackages)s
%(numfig_format)s
%(preamble)s
\title{%(title)s}
@ -155,6 +156,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
'fncychap': '\\usepackage[Bjarne]{fncychap}',
'longtable': '\\usepackage{longtable}',
'usepackages': '',
'numfig_format': '',
'preamble': '',
'title': '',
'date': '',
@ -249,6 +251,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
if self.elements['extraclassoptions']:
self.elements['classoptions'] += ',' + \
self.elements['extraclassoptions']
self.elements['numfig_format'] = self.generate_numfig_format(builder)
self.highlighter = highlighting.PygmentsBridge('latex',
builder.config.pygments_style, builder.config.trim_doctest_flags)
@ -323,6 +326,63 @@ class LaTeXTranslator(nodes.NodeVisitor):
encode('ascii', 'backslashreplace').decode('ascii').\
replace('\\', '_')
def generate_numfig_format(self, builder):
ret = []
if builder.config.language == 'ja':
babel_prefix = ''
babel_suffix = ''
else:
if builder.config.language:
language = ExtBabel(builder.config.language).get_language()
if language is None:
language = 'english'
else:
language = 'english'
babel_prefix = '\\addto\\captions%s{' % language
babel_suffix = '}'
figure = self.builder.config.numfig_format['figure'].split('%s', 1)
if len(figure) == 1:
ret.append('\\def\\fnum@figure{%s}\n' %
text_type(figure[0]).translate(tex_escape_map))
else:
ret.append('%s\\renewcommand{\\figurename}{%s}%s\n' %
(babel_prefix,
text_type(figure[0]).translate(tex_escape_map),
babel_suffix))
if figure[1]:
ret.append('\\makeatletter\n')
ret.append('\\def\\fnum@figure{\\figurename\\thefigure%s}\n' %
text_type(figure[1]).translate(tex_escape_map))
ret.append('\\makeatother\n')
table = self.builder.config.numfig_format['table'].split('%s', 1)
if len(table) == 1:
ret.append('\\def\\fnum@table{%s}\n' %
text_type(table[0]).translate(tex_escape_map))
else:
ret.append('%s\\renewcommand{\\tablename}{%s}%s\n' %
(babel_prefix,
text_type(table[0]).translate(tex_escape_map),
babel_suffix))
if table[1]:
ret.append('\\makeatletter\n')
ret.append('\\def\\fnum@table{\\tablename\\thetable%s}\n' %
text_type(table[1]).translate(tex_escape_map))
ret.append('\\makeatother\n')
codeblock = self.builder.config.numfig_format['code-block'].split('%s', 1)
if len(codeblock) == 1:
pass # FIXME
else:
ret.append('\\floatname{literal-block}{%s}\n' %
text_type(codeblock[0]).translate(tex_escape_map))
if table[1]:
pass # FIXME
return ''.join(ret)
def generate_indices(self):
def generate(content, collapsed):
ret.append('\\begin{theindex}\n')
@ -1290,8 +1350,9 @@ class LaTeXTranslator(nodes.NodeVisitor):
id = node.get('refuri', '')[1:].replace('#', ':')
ref = '\\ref{%s}' % self.idescape(id)
title = node.get('title', '#')
self.body.append(title.replace('#', ref))
title = text_type(node.get('title', '#')).translate(tex_escape_map)
hyperref = '\\hyperref[%s]{%s}' % (self.idescape(id), title.replace('\\#', ref))
self.body.append(hyperref)
raise nodes.SkipNode

View File

@ -166,12 +166,67 @@ def test_numref(app, status, warning):
print(result)
print(status.getvalue())
print(warning.getvalue())
assert '\\renewcommand{\\figurename}{Fig. }' in result
assert '\\renewcommand{\\tablename}{Table }' in result
assert '\\floatname{literal-block}{Listing }' in result
assert '\\hyperref[index:fig1]{Fig. \\ref{index:fig1}}' in result
assert '\\hyperref[baz:fig22]{Figure\\ref{baz:fig22}}' in result
assert '\\hyperref[index:table-1]{Table \\ref{index:table-1}}' in result
assert '\\hyperref[baz:table22]{Table:\\ref{baz:table22}}' in result
assert '\\hyperref[index:code-1]{Listing \\ref{index:code-1}}' in result
assert '\\hyperref[baz:code22]{Code-\\ref{baz:code22}}' in result
@with_app(buildername='latex', testroot='numfig',
confoverrides={'numfig': True,
'numfig_format': {'figure': 'Figure:%s',
'table': 'Tab_%s',
'code-block': 'Code-%s'}})
def test_numref_with_prefix1(app, status, warning):
app.builder.build_all()
result = (app.outdir / 'Python.tex').text(encoding='utf8')
print(result)
print(status.getvalue())
print(warning.getvalue())
assert '\\renewcommand{\\figurename}{Figure:}' in result
assert '\\renewcommand{\\tablename}{Tab\\_}' in result
assert '\\floatname{literal-block}{Code-}' in result
assert '\\ref{index:fig1}' in result
assert '\\ref{baz:fig22}' in result
assert '\\ref{index:table-1}' in result
assert '\\ref{baz:table22}' in result
assert '\\ref{index:code-1}' in result
assert '\\ref{baz:code22}' in result
assert '\\hyperref[index:fig1]{Figure:\\ref{index:fig1}}' in result
assert '\\hyperref[baz:fig22]{Figure\\ref{baz:fig22}}' in result
assert '\\hyperref[index:table-1]{Tab\\_\\ref{index:table-1}}' in result
assert '\\hyperref[baz:table22]{Table:\\ref{baz:table22}}' in result
assert '\\hyperref[index:code-1]{Code-\\ref{index:code-1}}' in result
assert '\\hyperref[baz:code22]{Code-\\ref{baz:code22}}' in result
@with_app(buildername='latex', testroot='numfig',
confoverrides={'numfig': True,
'numfig_format': {'figure': 'Figure:%s.',
'table': 'Tab_%s:',
'code-block': 'Code-%s | '}})
def test_numref_with_prefix2(app, status, warning):
app.builder.build_all()
result = (app.outdir / 'Python.tex').text(encoding='utf8')
print(result)
print(status.getvalue())
print(warning.getvalue())
assert '\\renewcommand{\\figurename}{Figure:}' in result
assert '\\def\\fnum@figure{\\figurename\\thefigure.}' in result
assert '\\renewcommand{\\tablename}{Tab\\_}' in result
assert '\\def\\fnum@table{\\tablename\\thetable:}' in result
assert '\\floatname{literal-block}{Code-}' in result
assert '\\hyperref[index:fig1]{Figure:\\ref{index:fig1}.}' in result
assert '\\hyperref[baz:fig22]{Figure\\ref{baz:fig22}}' in result
assert '\\hyperref[index:table-1]{Tab\\_\\ref{index:table-1}:}' in result
assert '\\hyperref[baz:table22]{Table:\\ref{baz:table22}}' in result
assert '\\hyperref[index:code-1]{Code-\\ref{index:code-1} \\textbar{} }' in result
assert '\\hyperref[baz:code22]{Code-\\ref{baz:code22}}' in result
@with_app(buildername='latex')