mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix #6149: LaTeX: :index: role titles causes build error of LaTeX
This commit is contained in:
parent
9f283bc3f1
commit
05d3e37ef7
2
CHANGES
2
CHANGES
@ -21,6 +21,8 @@ Bugs fixed
|
|||||||
* #6046: LaTeX: ``TypeError`` is raised when invalid latex_elements given
|
* #6046: LaTeX: ``TypeError`` is raised when invalid latex_elements given
|
||||||
* #6067: LaTeX: images having a target are concatenated to next line
|
* #6067: LaTeX: images having a target are concatenated to next line
|
||||||
* #6067: LaTeX: images having a target are not aligned even if specified
|
* #6067: LaTeX: images having a target are not aligned even if specified
|
||||||
|
* #6149: LaTeX: ``:index:`` role in titles causes ``Use of \@icentercr doesn't
|
||||||
|
match its definition`` error on latexpdf build
|
||||||
* #6019: imgconverter: Including multipage PDF fails
|
* #6019: imgconverter: Including multipage PDF fails
|
||||||
* #6047: autodoc: ``autofunction`` emits a warning for method objects
|
* #6047: autodoc: ``autofunction`` emits a warning for method objects
|
||||||
* #6028: graphviz: Ensure the graphviz filenames are reproducible
|
* #6028: graphviz: Ensure the graphviz filenames are reproducible
|
||||||
|
@ -20,7 +20,7 @@ from sphinx.builders import Builder
|
|||||||
from sphinx.builders.latex.transforms import (
|
from sphinx.builders.latex.transforms import (
|
||||||
BibliographyTransform, CitationReferenceTransform, MathReferenceTransform,
|
BibliographyTransform, CitationReferenceTransform, MathReferenceTransform,
|
||||||
FootnoteDocnameUpdater, LaTeXFootnoteTransform, LiteralBlockTransform,
|
FootnoteDocnameUpdater, LaTeXFootnoteTransform, LiteralBlockTransform,
|
||||||
ShowUrlsTransform, DocumentTargetTransform,
|
ShowUrlsTransform, DocumentTargetTransform, IndexInSectionTitleTransform,
|
||||||
)
|
)
|
||||||
from sphinx.config import string_classes, ENUM
|
from sphinx.config import string_classes, ENUM
|
||||||
from sphinx.environment import NoUri
|
from sphinx.environment import NoUri
|
||||||
@ -284,7 +284,8 @@ class LaTeXBuilder(Builder):
|
|||||||
ShowUrlsTransform,
|
ShowUrlsTransform,
|
||||||
LaTeXFootnoteTransform,
|
LaTeXFootnoteTransform,
|
||||||
LiteralBlockTransform,
|
LiteralBlockTransform,
|
||||||
DocumentTargetTransform])
|
DocumentTargetTransform,
|
||||||
|
IndexInSectionTitleTransform])
|
||||||
transformer.apply_transforms()
|
transformer.apply_transforms()
|
||||||
|
|
||||||
def finish(self):
|
def finish(self):
|
||||||
|
@ -596,3 +596,40 @@ class DocumentTargetTransform(SphinxTransform):
|
|||||||
section = node.next_node(nodes.section)
|
section = node.next_node(nodes.section)
|
||||||
if section:
|
if section:
|
||||||
section['ids'].append(':doc') # special label for :doc:
|
section['ids'].append(':doc') # special label for :doc:
|
||||||
|
|
||||||
|
|
||||||
|
class IndexInSectionTitleTransform(SphinxTransform):
|
||||||
|
"""Move index nodes in section title to outside of the title.
|
||||||
|
|
||||||
|
LaTeX index macro is not compatible with some handling of section titles
|
||||||
|
such as uppercasing done on LaTeX side (cf. fncychap handling of ``\\chapter``).
|
||||||
|
Moving the index node to after the title node fixes that.
|
||||||
|
|
||||||
|
Before::
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>
|
||||||
|
blah blah <index entries=[...]/>blah
|
||||||
|
<paragraph>
|
||||||
|
blah blah blah
|
||||||
|
...
|
||||||
|
|
||||||
|
After::
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<title>
|
||||||
|
blah blah blah
|
||||||
|
<index entries=[...]/>
|
||||||
|
<paragraph>
|
||||||
|
blah blah blah
|
||||||
|
...
|
||||||
|
"""
|
||||||
|
default_priority = 400
|
||||||
|
|
||||||
|
def apply(self):
|
||||||
|
for node in self.document.traverse(nodes.title):
|
||||||
|
if isinstance(node.parent, nodes.section):
|
||||||
|
for i, index in enumerate(node.traverse(addnodes.index)):
|
||||||
|
# move the index node next to the section title
|
||||||
|
node.remove(index)
|
||||||
|
node.parent.insert(i + 1, index)
|
||||||
|
0
tests/roots/test-index_on_title/conf.py
Normal file
0
tests/roots/test-index_on_title/conf.py
Normal file
5
tests/roots/test-index_on_title/contents.rst
Normal file
5
tests/roots/test-index_on_title/contents.rst
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
index_on_title
|
||||||
|
==============
|
||||||
|
|
||||||
|
Test for :index:`index` in top level title
|
||||||
|
------------------------------------------
|
@ -1349,6 +1349,15 @@ def test_latex_labels(app, status, warning):
|
|||||||
r'\label{\detokenize{otherdoc:otherdoc}}'
|
r'\label{\detokenize{otherdoc:otherdoc}}'
|
||||||
r'\label{\detokenize{otherdoc::doc}}' in result)
|
r'\label{\detokenize{otherdoc::doc}}' in result)
|
||||||
|
|
||||||
|
|
||||||
# Embeded standalone hyperlink reference (refs: #5948)
|
# Embeded standalone hyperlink reference (refs: #5948)
|
||||||
assert result.count(r'\label{\detokenize{index:section1}}') == 1
|
assert result.count(r'\label{\detokenize{index:section1}}') == 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('latex', testroot='index_on_title')
|
||||||
|
def test_index_on_title(app, status, warning):
|
||||||
|
app.builder.build_all()
|
||||||
|
result = (app.outdir / 'Python.tex').text(encoding='utf8')
|
||||||
|
assert ('\\chapter{Test for index in top level title}\n'
|
||||||
|
'\\label{\\detokenize{contents:test-for-index-in-top-level-title}}'
|
||||||
|
'\\index{index@\\spxentry{index}}\n'
|
||||||
|
in result)
|
||||||
|
Loading…
Reference in New Issue
Block a user