From 1ee7f5a16334769d1ddbeae1e7f32f7d6410c08d Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Mon, 23 Feb 2015 00:29:05 +0900 Subject: [PATCH] #1719 Use numfig_format for prefix of captions in LaTeX builder --- CHANGES | 1 + sphinx/writers/latex.py | 36 ++++++++++++++++++++++++++++ tests/test_build_latex.py | 49 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/CHANGES b/CHANGES index d0c0e0fd0..65c1ac95f 100644 --- a/CHANGES +++ b/CHANGES @@ -95,6 +95,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) diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index b92f84a0c..d287e50ab 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -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() self.highlighter = highlighting.PygmentsBridge('latex', builder.config.pygments_style, builder.config.trim_doctest_flags) @@ -323,6 +326,39 @@ class LaTeXTranslator(nodes.NodeVisitor): encode('ascii', 'backslashreplace').decode('ascii').\ replace('\\', '_') + def generate_numfig_format(self): + ret = [] + + figure = self.builder.config.numfig_format['figure'].split('%s', 1) + if len(figure) == 1: + ret.append(r'\def\fnum@figure{%s}' % figure[0]) + else: + ret.append(r'\renewcommand{\figurename}{%s}' % figure[0]) + if figure[1]: + ret.append(r'\makeatletter') + ret.append(r'\def\fnum@figure{\figurename\thefigure%s}' % figure[1]) + ret.append(r'\makeatother') + + table = self.builder.config.numfig_format['table'].split('%s', 1) + if len(table) == 1: + ret.append(r'\def\fnum@table{%s}' % table[0]) + else: + ret.append(r'\renewcommand{\tablename}{%s}' % table[0]) + if table[1]: + ret.append(r'\makeatletter') + ret.append(r'\def\fnum@table{\tablename\thetable%s}' % table[1]) + ret.append(r'\makeatother') + + code = self.builder.config.numfig_format['code-block'].split('%s', 1) + if len(code) == 1: + pass # FIXME + else: + ret.append(r'\floatname{literal-block}{%s}' % code[0]) + if table[1]: + pass # FIXME + + return '\n'.join(ret) + def generate_indices(self): def generate(content, collapsed): ret.append('\\begin{theindex}\n') diff --git a/tests/test_build_latex.py b/tests/test_build_latex.py index ad8afab6f..9bdd8c2e2 100644 --- a/tests/test_build_latex.py +++ b/tests/test_build_latex.py @@ -166,6 +166,55 @@ 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 '\\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 + + +@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 + + +@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 '\\ref{index:fig1}' in result assert '\\ref{baz:fig22}' in result assert '\\ref{index:table-1}' in result