Fix #4973: latex: glossary directive adds whitespace to each item

This commit is contained in:
Takeshi KOMIYA 2018-05-19 15:20:30 +09:00
parent c2a245ac12
commit ff3ac70c76
5 changed files with 67 additions and 16 deletions

View File

@ -36,6 +36,7 @@ Bugs fixed
* #4979: latex: Incorrect escaping of curly braces in index entries * #4979: latex: Incorrect escaping of curly braces in index entries
* #4956: autodoc: Failed to extract document from a subclass of the class on * #4956: autodoc: Failed to extract document from a subclass of the class on
mocked module mocked module
* #4973: latex: glossary directive adds whitespace to each item
Testing Testing
-------- --------

View File

@ -725,7 +725,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
# type: (unicode, bool, bool) -> unicode # type: (unicode, bool, bool) -> unicode
if withdoc: if withdoc:
id = self.curfilestack[-1] + ':' + id id = self.curfilestack[-1] + ':' + id
return (anchor and '\\phantomsection' or '') + \ return (anchor and r'\phantomsection\relax' or '') + \
'\\label{%s}' % self.idescape(id) '\\label{%s}' % self.idescape(id)
def hyperlink(self, id): def hyperlink(self, id):
@ -1555,9 +1555,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_term(self, node): def visit_term(self, node):
# type: (nodes.Node) -> None # type: (nodes.Node) -> None
self.in_term += 1 self.in_term += 1
ctx = '}] \\leavevmode' # type: unicode ctx = ''.join(self.hypertarget(node_id) for node_id in node['ids'])
if node.get('ids'): ctx += '}] \\leavevmode'
ctx += self.hypertarget(node['ids'][0])
self.body.append('\\item[{') self.body.append('\\item[{')
self.restrict_footnote(node) self.restrict_footnote(node)
self.context.append(ctx) self.context.append(ctx)

View File

@ -0,0 +1,7 @@
# -*- coding: utf-8 -*-
master_doc = 'index'
latex_documents = [
(master_doc, 'test.tex', 'The basic Sphinx documentation for testing', 'Sphinx', 'report')
]

View File

@ -0,0 +1,22 @@
test-glossary
=============
.. glossary::
:sorted:
boson
Particle with integer spin.
*fermion*
Particle with half-integer spin.
tauon
myon
electron
Examples for fermions.
über
Gewisse
änhlich
Dinge

View File

@ -592,12 +592,12 @@ def test_footnote(app, status, warning):
assert '\\begin{footnote}[3]\\sphinxAtStartFootnote\nnamed\n%\n\\end{footnote}' in result assert '\\begin{footnote}[3]\\sphinxAtStartFootnote\nnamed\n%\n\\end{footnote}' in result
assert '{\\hyperref[\\detokenize{footnote:bar}]{\\sphinxcrossref{{[}bar{]}}}}' in result assert '{\\hyperref[\\detokenize{footnote:bar}]{\\sphinxcrossref{{[}bar{]}}}}' in result
assert ('\\bibitem[bar]{\\detokenize{bar}}' assert ('\\bibitem[bar]{\\detokenize{bar}}'
'{\\phantomsection\\label{\\detokenize{footnote:bar}} ') in result '{\\phantomsection\\relax\\label{\\detokenize{footnote:bar}} ') in result
assert ('\\bibitem[bar]{\\detokenize{bar}}' assert ('\\bibitem[bar]{\\detokenize{bar}}'
'{\\phantomsection\\label{\\detokenize{footnote:bar}} ' '{\\phantomsection\\relax\\label{\\detokenize{footnote:bar}} '
'\ncite') in result '\ncite') in result
assert ('\\bibitem[bar]{\\detokenize{bar}}' assert ('\\bibitem[bar]{\\detokenize{bar}}'
'{\\phantomsection\\label{\\detokenize{footnote:bar}} ' '{\\phantomsection\\relax\\label{\\detokenize{footnote:bar}} '
'\ncite\n}') in result '\ncite\n}') in result
assert '\\sphinxcaption{Table caption \\sphinxfootnotemark[4]' in result assert '\\sphinxcaption{Table caption \\sphinxfootnotemark[4]' in result
assert ('\\hline%\n\\begin{footnotetext}[4]\\sphinxAtStartFootnote\n' assert ('\\hline%\n\\begin{footnotetext}[4]\\sphinxAtStartFootnote\n'
@ -666,14 +666,14 @@ def test_latex_show_urls_is_inline(app, status, warning):
'footnote in bar\n%\n\\end{footnote} in bar.rst') in result 'footnote in bar\n%\n\\end{footnote} in bar.rst') in result
assert ('Auto footnote number %\n\\begin{footnote}[1]\\sphinxAtStartFootnote\n' assert ('Auto footnote number %\n\\begin{footnote}[1]\\sphinxAtStartFootnote\n'
'footnote in baz\n%\n\\end{footnote} in baz.rst') in result 'footnote in baz\n%\n\\end{footnote} in baz.rst') in result
assert ('\\phantomsection\\label{\\detokenize{index:id30}}' assert ('\\phantomsection\\relax\\label{\\detokenize{index:id30}}'
'{\\hyperref[\\detokenize{index:the-section' '{\\hyperref[\\detokenize{index:the-section'
'-with-a-reference-to-authoryear}]' '-with-a-reference-to-authoryear}]'
'{\\sphinxcrossref{The section with a reference to ' '{\\sphinxcrossref{The section with a reference to '
'\\phantomsection\\label{\\detokenize{index:id1}}' '\\phantomsection\\relax\\label{\\detokenize{index:id1}}'
'{\\hyperref[\\detokenize{index:authoryear}]' '{\\hyperref[\\detokenize{index:authoryear}]'
'{\\sphinxcrossref{{[}AuthorYear{]}}}}}}}') in result '{\\sphinxcrossref{{[}AuthorYear{]}}}}}}}') in result
assert ('\\phantomsection\\label{\\detokenize{index:id31}}' assert ('\\phantomsection\\relax\\label{\\detokenize{index:id31}}'
'{\\hyperref[\\detokenize{index:the-section-with-a-reference-to}]' '{\\hyperref[\\detokenize{index:the-section-with-a-reference-to}]'
'{\\sphinxcrossref{The section with a reference to }}}' in result) '{\\sphinxcrossref{The section with a reference to }}}' in result)
assert ('First footnote: %\n\\begin{footnote}[2]\\sphinxAtStartFootnote\n' assert ('First footnote: %\n\\begin{footnote}[2]\\sphinxAtStartFootnote\n'
@ -711,13 +711,13 @@ def test_latex_show_urls_is_footnote(app, status, warning):
'footnote in bar\n%\n\\end{footnote} in bar.rst') in result 'footnote in bar\n%\n\\end{footnote} in bar.rst') in result
assert ('Auto footnote number %\n\\begin{footnote}[2]\\sphinxAtStartFootnote\n' assert ('Auto footnote number %\n\\begin{footnote}[2]\\sphinxAtStartFootnote\n'
'footnote in baz\n%\n\\end{footnote} in baz.rst') in result 'footnote in baz\n%\n\\end{footnote} in baz.rst') in result
assert ('\\phantomsection\\label{\\detokenize{index:id30}}' assert ('\\phantomsection\\relax\\label{\\detokenize{index:id30}}'
'{\\hyperref[\\detokenize{index:the-section-with-a-reference-to-authoryear}]' '{\\hyperref[\\detokenize{index:the-section-with-a-reference-to-authoryear}]'
'{\\sphinxcrossref{The section with a reference ' '{\\sphinxcrossref{The section with a reference '
'to \\phantomsection\\label{\\detokenize{index:id1}}' 'to \\phantomsection\\relax\\label{\\detokenize{index:id1}}'
'{\\hyperref[\\detokenize{index:authoryear}]' '{\\hyperref[\\detokenize{index:authoryear}]'
'{\\sphinxcrossref{{[}AuthorYear{]}}}}}}}') in result '{\\sphinxcrossref{{[}AuthorYear{]}}}}}}}') in result
assert ('\\phantomsection\\label{\\detokenize{index:id31}}' assert ('\\phantomsection\\relax\\label{\\detokenize{index:id31}}'
'{\\hyperref[\\detokenize{index:the-section-with-a-reference-to}]' '{\\hyperref[\\detokenize{index:the-section-with-a-reference-to}]'
'{\\sphinxcrossref{The section with a reference to }}}') in result '{\\sphinxcrossref{The section with a reference to }}}') in result
assert ('First footnote: %\n\\begin{footnote}[3]\\sphinxAtStartFootnote\n' assert ('First footnote: %\n\\begin{footnote}[3]\\sphinxAtStartFootnote\n'
@ -764,13 +764,13 @@ def test_latex_show_urls_is_no(app, status, warning):
'footnote in bar\n%\n\\end{footnote} in bar.rst') in result 'footnote in bar\n%\n\\end{footnote} in bar.rst') in result
assert ('Auto footnote number %\n\\begin{footnote}[1]\\sphinxAtStartFootnote\n' assert ('Auto footnote number %\n\\begin{footnote}[1]\\sphinxAtStartFootnote\n'
'footnote in baz\n%\n\\end{footnote} in baz.rst') in result 'footnote in baz\n%\n\\end{footnote} in baz.rst') in result
assert ('\\phantomsection\\label{\\detokenize{index:id30}}' assert ('\\phantomsection\\relax\\label{\\detokenize{index:id30}}'
'{\\hyperref[\\detokenize{index:the-section-with-a-reference-to-authoryear}]' '{\\hyperref[\\detokenize{index:the-section-with-a-reference-to-authoryear}]'
'{\\sphinxcrossref{The section with a reference ' '{\\sphinxcrossref{The section with a reference '
'to \\phantomsection\\label{\\detokenize{index:id1}}' 'to \\phantomsection\\relax\\label{\\detokenize{index:id1}}'
'{\\hyperref[\\detokenize{index:authoryear}]' '{\\hyperref[\\detokenize{index:authoryear}]'
'{\\sphinxcrossref{{[}AuthorYear{]}}}}}}}') in result '{\\sphinxcrossref{{[}AuthorYear{]}}}}}}}') in result
assert ('\\phantomsection\\label{\\detokenize{index:id31}}' assert ('\\phantomsection\\relax\\label{\\detokenize{index:id31}}'
'{\\hyperref[\\detokenize{index:the-section-with-a-reference-to}]' '{\\hyperref[\\detokenize{index:the-section-with-a-reference-to}]'
'{\\sphinxcrossref{The section with a reference to }}}' in result) '{\\sphinxcrossref{The section with a reference to }}}' in result)
assert ('First footnote: %\n\\begin{footnote}[2]\\sphinxAtStartFootnote\n' assert ('First footnote: %\n\\begin{footnote}[2]\\sphinxAtStartFootnote\n'
@ -1242,3 +1242,25 @@ def test_latex_nested_enumerated_list(app, status, warning):
assert r'\setcounter{enumiii}{9}' in result assert r'\setcounter{enumiii}{9}' in result
assert r'\setcounter{enumiv}{23}' in result assert r'\setcounter{enumiv}{23}' in result
assert r'\setcounter{enumii}{2}' in result assert r'\setcounter{enumii}{2}' in result
@pytest.mark.sphinx('latex', testroot='glossary')
def test_latex_glossary(app, status, warning):
app.builder.build_all()
result = (app.outdir / 'test.tex').text(encoding='utf8')
assert (u'\\item[{änhlich\\index{änhlich|textbf}\\phantomsection\\relax'
r'\label{\detokenize{index:term-anhlich}}}] \leavevmode' in result)
assert (r'\item[{boson\index{boson|textbf}\phantomsection\relax'
r'\label{\detokenize{index:term-boson}}}] \leavevmode' in result)
assert (r'\item[{\sphinxstyleemphasis{fermion}\index{fermion|textbf}'
r'\phantomsection\relax\label{\detokenize{index:term-fermion}}}] '
r'\leavevmode' in result)
assert (r'\item[{tauon\index{tauon|textbf}\phantomsection\relax'
r'\label{\detokenize{index:term-tauon}}}] \leavevmode'
r'\item[{myon\index{myon|textbf}\phantomsection\relax'
r'\label{\detokenize{index:term-myon}}}] \leavevmode'
r'\item[{electron\index{electron|textbf}\phantomsection\relax'
r'\label{\detokenize{index:term-electron}}}] \leavevmode' in result)
assert (u'\\item[{über\\index{über|textbf}\\phantomsection\\relax'
r'\label{\detokenize{index:term-uber}}}] \leavevmode' in result)