mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Close #1990: Use caption of toctree to title of \tableofcontents in LaTeX
This commit is contained in:
parent
bf7b410f6a
commit
20d992cdf5
@ -102,11 +102,22 @@ class LaTeXBuilder(Builder):
|
|||||||
doctree.settings = docsettings
|
doctree.settings = docsettings
|
||||||
doctree.settings.author = author
|
doctree.settings.author = author
|
||||||
doctree.settings.title = title
|
doctree.settings.title = title
|
||||||
|
doctree.settings.contentsname = self.get_contentsname(docname)
|
||||||
doctree.settings.docname = docname
|
doctree.settings.docname = docname
|
||||||
doctree.settings.docclass = docclass
|
doctree.settings.docclass = docclass
|
||||||
docwriter.write(doctree, destination)
|
docwriter.write(doctree, destination)
|
||||||
self.info("done")
|
self.info("done")
|
||||||
|
|
||||||
|
def get_contentsname(self, indexfile):
|
||||||
|
tree = self.env.get_doctree(indexfile)
|
||||||
|
contentsname = None
|
||||||
|
for toctree in tree.traverse(addnodes.toctree):
|
||||||
|
if toctree['caption']:
|
||||||
|
contentsname = toctree['caption']
|
||||||
|
break
|
||||||
|
|
||||||
|
return contentsname
|
||||||
|
|
||||||
def assemble_doctree(self, indexfile, toctree_only, appendices):
|
def assemble_doctree(self, indexfile, toctree_only, appendices):
|
||||||
self.docnames = set([indexfile] + appendices)
|
self.docnames = set([indexfile] + appendices)
|
||||||
self.info(darkgreen(indexfile) + " ", nonl=1)
|
self.info(darkgreen(indexfile) + " ", nonl=1)
|
||||||
|
@ -43,6 +43,7 @@ HEADER = r'''%% Generated by Sphinx.
|
|||||||
\usepackage{sphinx}
|
\usepackage{sphinx}
|
||||||
\usepackage{multirow}
|
\usepackage{multirow}
|
||||||
%(usepackages)s
|
%(usepackages)s
|
||||||
|
%(contentsname)s
|
||||||
%(numfig_format)s
|
%(numfig_format)s
|
||||||
%(preamble)s
|
%(preamble)s
|
||||||
|
|
||||||
@ -159,6 +160,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
'longtable': '\\usepackage{longtable}',
|
'longtable': '\\usepackage{longtable}',
|
||||||
'usepackages': '',
|
'usepackages': '',
|
||||||
'numfig_format': '',
|
'numfig_format': '',
|
||||||
|
'contentsname': '',
|
||||||
'preamble': '',
|
'preamble': '',
|
||||||
'title': '',
|
'title': '',
|
||||||
'date': '',
|
'date': '',
|
||||||
@ -248,6 +250,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
return '\\usepackage{%s}' % (packagename,)
|
return '\\usepackage{%s}' % (packagename,)
|
||||||
usepackages = (declare_package(*p) for p in builder.usepackages)
|
usepackages = (declare_package(*p) for p in builder.usepackages)
|
||||||
self.elements['usepackages'] += "\n".join(usepackages)
|
self.elements['usepackages'] += "\n".join(usepackages)
|
||||||
|
if getattr(document.settings, 'contentsname', None):
|
||||||
|
self.elements['contentsname'] = self.babel_renewcommand(builder, '\\contentsname', document.settings.contentsname)
|
||||||
self.elements['numfig_format'] = self.generate_numfig_format(builder)
|
self.elements['numfig_format'] = self.generate_numfig_format(builder)
|
||||||
# allow the user to override them all
|
# allow the user to override them all
|
||||||
self.elements.update(builder.config.latex_elements)
|
self.elements.update(builder.config.latex_elements)
|
||||||
@ -329,8 +333,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
encode('ascii', 'backslashreplace').decode('ascii').\
|
encode('ascii', 'backslashreplace').decode('ascii').\
|
||||||
replace('\\', '_')
|
replace('\\', '_')
|
||||||
|
|
||||||
def generate_numfig_format(self, builder):
|
def babel_renewcommand(self, builder, command, definition):
|
||||||
ret = []
|
|
||||||
if builder.config.language == 'ja':
|
if builder.config.language == 'ja':
|
||||||
babel_prefix = ''
|
babel_prefix = ''
|
||||||
babel_suffix = ''
|
babel_suffix = ''
|
||||||
@ -349,15 +352,27 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
babel_prefix = ''
|
babel_prefix = ''
|
||||||
babel_suffix = ''
|
babel_suffix = ''
|
||||||
|
|
||||||
|
return ('%s\\renewcommand{%s}{%s}%s\n' %
|
||||||
|
(babel_prefix, command, definition, babel_suffix))
|
||||||
|
|
||||||
|
def generate_contentsname(self, builder, document):
|
||||||
|
print '---'
|
||||||
|
print '---'
|
||||||
|
print '---'
|
||||||
|
for toctree in document.traverse(addnodes.toctree):
|
||||||
|
if toctree['caption']:
|
||||||
|
print toctree['caption']
|
||||||
|
return ''
|
||||||
|
|
||||||
|
def generate_numfig_format(self, builder):
|
||||||
|
ret = []
|
||||||
figure = self.builder.config.numfig_format['figure'].split('%s', 1)
|
figure = self.builder.config.numfig_format['figure'].split('%s', 1)
|
||||||
if len(figure) == 1:
|
if len(figure) == 1:
|
||||||
ret.append('\\def\\fnum@figure{%s}\n' %
|
ret.append('\\def\\fnum@figure{%s}\n' %
|
||||||
text_type(figure[0]).translate(tex_escape_map))
|
text_type(figure[0]).translate(tex_escape_map))
|
||||||
else:
|
else:
|
||||||
ret.append('%s\\renewcommand{\\figurename}{%s}%s\n' %
|
definition = text_type(figure[0]).translate(tex_escape_map)
|
||||||
(babel_prefix,
|
ret.append(self.babel_renewcommand(builder, '\\figurename', definition))
|
||||||
text_type(figure[0]).translate(tex_escape_map),
|
|
||||||
babel_suffix))
|
|
||||||
if figure[1]:
|
if figure[1]:
|
||||||
ret.append('\\makeatletter\n')
|
ret.append('\\makeatletter\n')
|
||||||
ret.append('\\def\\fnum@figure{\\figurename\\thefigure%s}\n' %
|
ret.append('\\def\\fnum@figure{\\figurename\\thefigure%s}\n' %
|
||||||
@ -369,10 +384,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
ret.append('\\def\\fnum@table{%s}\n' %
|
ret.append('\\def\\fnum@table{%s}\n' %
|
||||||
text_type(table[0]).translate(tex_escape_map))
|
text_type(table[0]).translate(tex_escape_map))
|
||||||
else:
|
else:
|
||||||
ret.append('%s\\renewcommand{\\tablename}{%s}%s\n' %
|
definition = text_type(table[0]).translate(tex_escape_map)
|
||||||
(babel_prefix,
|
ret.append(self.babel_renewcommand(builder, '\\tablename', definition))
|
||||||
text_type(table[0]).translate(tex_escape_map),
|
|
||||||
babel_suffix))
|
|
||||||
if table[1]:
|
if table[1]:
|
||||||
ret.append('\\makeatletter\n')
|
ret.append('\\makeatletter\n')
|
||||||
ret.append('\\def\\fnum@table{\\tablename\\thetable%s}\n' %
|
ret.append('\\def\\fnum@table{\\tablename\\thetable%s}\n' %
|
||||||
|
4
tests/roots/test-contentsname/bar.rst
Normal file
4
tests/roots/test-contentsname/bar.rst
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
===
|
||||||
|
Bar
|
||||||
|
===
|
||||||
|
|
4
tests/roots/test-contentsname/conf.py
Normal file
4
tests/roots/test-contentsname/conf.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
master_doc = 'index'
|
||||||
|
html_theme = 'classic'
|
4
tests/roots/test-contentsname/foo.rst
Normal file
4
tests/roots/test-contentsname/foo.rst
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
===
|
||||||
|
Foo
|
||||||
|
===
|
||||||
|
|
8
tests/roots/test-contentsname/index.rst
Normal file
8
tests/roots/test-contentsname/index.rst
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
test-tocdepth
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:caption: Table of content
|
||||||
|
|
||||||
|
foo
|
||||||
|
bar
|
@ -275,3 +275,25 @@ def test_latex_add_latex_package(app, status, warning):
|
|||||||
result = (app.outdir / 'SphinxTests.tex').text(encoding='utf8')
|
result = (app.outdir / 'SphinxTests.tex').text(encoding='utf8')
|
||||||
assert '\\usepackage{foo}' in result
|
assert '\\usepackage{foo}' in result
|
||||||
assert '\\usepackage[baz]{bar}' in result
|
assert '\\usepackage[baz]{bar}' in result
|
||||||
|
|
||||||
|
|
||||||
|
@with_app(buildername='latex', testroot='contentsname')
|
||||||
|
def test_contentsname(app, status, warning):
|
||||||
|
app.builder.build_all()
|
||||||
|
result = (app.outdir / 'Python.tex').text(encoding='utf8')
|
||||||
|
print(result)
|
||||||
|
print(status.getvalue())
|
||||||
|
print(warning.getvalue())
|
||||||
|
assert ('\\addto\\captionsenglish{\\renewcommand{\\contentsname}{Table of content}}'
|
||||||
|
in result)
|
||||||
|
|
||||||
|
|
||||||
|
@with_app(buildername='latex', testroot='contentsname',
|
||||||
|
confoverrides={'language': 'ja'})
|
||||||
|
def test_contentsname_with_language_ja(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{\\contentsname}{Table of content}' in result
|
||||||
|
Loading…
Reference in New Issue
Block a user