From 9f060278364dc6bc2068a25106c2ec75bada027a Mon Sep 17 00:00:00 2001 From: Takeshi KOMIYA Date: Tue, 3 Mar 2015 00:53:06 +0900 Subject: [PATCH] #1719 Add prefix to linkname of :numref: on LaTeX mode --- sphinx/writers/latex.py | 40 +++++++++++++++++++++++---------------- tests/test_build_latex.py | 34 +++++++++++++++++++-------------- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index d287e50ab..5c3d98cdb 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -331,33 +331,40 @@ class LaTeXTranslator(nodes.NodeVisitor): figure = self.builder.config.numfig_format['figure'].split('%s', 1) if len(figure) == 1: - ret.append(r'\def\fnum@figure{%s}' % figure[0]) + ret.append('\\def\\fnum@figure{%s}\n' % + text_type(figure[0]).translate(tex_escape_map)) else: - ret.append(r'\renewcommand{\figurename}{%s}' % figure[0]) + ret.append('\\renewcommand{\\figurename}{%s}\n' % + text_type(figure[0]).translate(tex_escape_map)) if figure[1]: - ret.append(r'\makeatletter') - ret.append(r'\def\fnum@figure{\figurename\thefigure%s}' % figure[1]) - ret.append(r'\makeatother') + 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(r'\def\fnum@table{%s}' % table[0]) + ret.append('\\def\\fnum@table{%s}\n' % + text_type(table[0]).translate(tex_escape_map)) else: - ret.append(r'\renewcommand{\tablename}{%s}' % table[0]) + ret.append('\\renewcommand{\\tablename}{%s}\n' % + text_type(table[0]).translate(tex_escape_map)) if table[1]: - ret.append(r'\makeatletter') - ret.append(r'\def\fnum@table{\tablename\thetable%s}' % table[1]) - ret.append(r'\makeatother') + 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') - code = self.builder.config.numfig_format['code-block'].split('%s', 1) - if len(code) == 1: + codeblock = self.builder.config.numfig_format['code-block'].split('%s', 1) + if len(codeblock) == 1: pass # FIXME else: - ret.append(r'\floatname{literal-block}{%s}' % code[0]) + ret.append('\\floatname{literal-block}{%s}\n' % + text_type(codeblock[0]).translate(tex_escape_map)) if table[1]: pass # FIXME - return '\n'.join(ret) + return ''.join(ret) def generate_indices(self): def generate(content, collapsed): @@ -1326,8 +1333,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 diff --git a/tests/test_build_latex.py b/tests/test_build_latex.py index 9bdd8c2e2..85c0abe33 100644 --- a/tests/test_build_latex.py +++ b/tests/test_build_latex.py @@ -169,12 +169,12 @@ def test_numref(app, status, warning): 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 + 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', @@ -189,7 +189,7 @@ def test_numref_with_prefix1(app, status, warning): print(status.getvalue()) print(warning.getvalue()) assert '\\renewcommand{\\figurename}{Figure:}' in result - assert '\\renewcommand{\\tablename}{Tab_}' 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 @@ -197,6 +197,12 @@ def test_numref_with_prefix1(app, status, warning): 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', @@ -212,15 +218,15 @@ def test_numref_with_prefix2(app, status, warning): print(warning.getvalue()) assert '\\renewcommand{\\figurename}{Figure:}' in result assert '\\def\\fnum@figure{\\figurename\\thefigure.}' in result - assert '\\renewcommand{\\tablename}{Tab_}' 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 - 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} \\textbar{} }' in result + assert '\\hyperref[baz:code22]{Code-\\ref{baz:code22}}' in result @with_app(buildername='latex')