mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
latex: Fix colwidths without :widths: option
This commit is contained in:
parent
a542ca2e78
commit
10ae47d7b9
@ -318,6 +318,7 @@ class ShowUrlsTransform(object):
|
|||||||
class Table(object):
|
class Table(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
# type: () -> None
|
# type: () -> None
|
||||||
|
self.classes = []
|
||||||
self.col = 0
|
self.col = 0
|
||||||
self.colcount = 0
|
self.colcount = 0
|
||||||
self.colspec = None # type: unicode
|
self.colspec = None # type: unicode
|
||||||
@ -1166,6 +1167,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
'%s:%s: nested tables are not yet implemented.' %
|
'%s:%s: nested tables are not yet implemented.' %
|
||||||
(self.curfilestack[-1], node.line or ''))
|
(self.curfilestack[-1], node.line or ''))
|
||||||
self.table = Table()
|
self.table = Table()
|
||||||
|
self.table.classes = node['classes']
|
||||||
self.table.longtable = 'longtable' in node['classes']
|
self.table.longtable = 'longtable' in node['classes']
|
||||||
self.tablebody = [] # type: List[unicode]
|
self.tablebody = [] # type: List[unicode]
|
||||||
self.tableheaders = [] # type: List[unicode]
|
self.tableheaders = [] # type: List[unicode]
|
||||||
@ -1205,7 +1207,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
endmacro = '\\end{tabulary}\n\n'
|
endmacro = '\\end{tabulary}\n\n'
|
||||||
if self.table.colspec:
|
if self.table.colspec:
|
||||||
self.body.append(self.table.colspec)
|
self.body.append(self.table.colspec)
|
||||||
elif self.table.colwidths:
|
elif self.table.colwidths and 'colwidths-given' in self.table.classes:
|
||||||
total = sum(self.table.colwidths)
|
total = sum(self.table.colwidths)
|
||||||
colspec = ['\\X{%d}{%d}' % (width, total)
|
colspec = ['\\X{%d}{%d}' % (width, total)
|
||||||
for width in self.table.colwidths]
|
for width in self.table.colwidths]
|
||||||
|
7
tests/roots/test-latex-table/conf.py
Normal file
7
tests/roots/test-latex-table/conf.py
Normal 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')
|
||||||
|
]
|
27
tests/roots/test-latex-table/index.rst
Normal file
27
tests/roots/test-latex-table/index.rst
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
test-latex-table
|
||||||
|
================
|
||||||
|
|
||||||
|
simple table
|
||||||
|
------------
|
||||||
|
|
||||||
|
======= =======
|
||||||
|
header1 header2
|
||||||
|
======= =======
|
||||||
|
cell1-1 cell1-2
|
||||||
|
cell2-1 cell2-2
|
||||||
|
cell3-1 cell3-2
|
||||||
|
======= =======
|
||||||
|
|
||||||
|
table having :widths: option
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
.. table::
|
||||||
|
:widths: 30,70
|
||||||
|
|
||||||
|
======= =======
|
||||||
|
header1 header2
|
||||||
|
======= =======
|
||||||
|
cell1-1 cell1-2
|
||||||
|
cell2-1 cell2-2
|
||||||
|
cell3-1 cell3-2
|
||||||
|
======= =======
|
@ -20,6 +20,7 @@ import pytest
|
|||||||
|
|
||||||
from sphinx.errors import SphinxError
|
from sphinx.errors import SphinxError
|
||||||
from sphinx.util.osutil import cd, ensuredir
|
from sphinx.util.osutil import cd, ensuredir
|
||||||
|
from sphinx.util import docutils
|
||||||
from sphinx.writers.latex import LaTeXTranslator
|
from sphinx.writers.latex import LaTeXTranslator
|
||||||
|
|
||||||
from util import SkipTest, remove_unicode_literals, strip_escseq, skip_if
|
from util import SkipTest, remove_unicode_literals, strip_escseq, skip_if
|
||||||
@ -814,3 +815,40 @@ def test_maxlistdepth_at_ten(app, status, warning):
|
|||||||
print(status.getvalue())
|
print(status.getvalue())
|
||||||
print(warning.getvalue())
|
print(warning.getvalue())
|
||||||
compile_latex_document(app)
|
compile_latex_document(app)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(docutils.__version_info__ < (0, 13),
|
||||||
|
reason='docutils-0.13 or above is required')
|
||||||
|
@pytest.mark.sphinx('latex', testroot='latex-table')
|
||||||
|
def test_latex_table(app, status, warning):
|
||||||
|
app.builder.build_all()
|
||||||
|
result = (app.outdir / 'test.tex').text(encoding='utf8')
|
||||||
|
tables = {}
|
||||||
|
for chap in re.split(r'\\chapter(?={.*})', result)[1:]:
|
||||||
|
sectname, content = chap.split('}', 1)
|
||||||
|
tables[sectname[1:]] = content.strip()
|
||||||
|
|
||||||
|
# simple_table
|
||||||
|
simple_table = tables['simple table']
|
||||||
|
assert ('\\noindent\\begin{tabulary}{\\linewidth}{|L|L|}' in simple_table)
|
||||||
|
assert ('\\hline\n'
|
||||||
|
'\\sphinxstylethead{\\relax \nheader1\n\\unskip}\\relax &'
|
||||||
|
'\\sphinxstylethead{\\relax \nheader2\n\\unskip}\\relax' in simple_table)
|
||||||
|
assert ('\\hline\ncell1-1\n&\ncell1-2\n\\\\' in simple_table)
|
||||||
|
assert ('\\hline\ncell2-1\n&\ncell2-2\n\\\\' in simple_table)
|
||||||
|
assert ('\\hline\ncell3-1\n&\ncell3-2\n\\\\' in simple_table)
|
||||||
|
assert ('\\hline\\end{tabulary}' in simple_table)
|
||||||
|
|
||||||
|
# table having :widths: option
|
||||||
|
widths_table = tables['table having :widths: option']
|
||||||
|
assert ('\\noindent\\begin{tabulary}{\\linewidth}{'
|
||||||
|
'|p{\\dimexpr(\\linewidth-\\arrayrulewidth)*30/100-2\\tabcolsep-\\arrayrulewidth\\relax}'
|
||||||
|
'|p{\\dimexpr(\\linewidth-\\arrayrulewidth)*70/100-2\\tabcolsep-\\arrayrulewidth\\relax}|}'
|
||||||
|
in widths_table)
|
||||||
|
assert ('\\hline\n'
|
||||||
|
'\\sphinxstylethead{\\relax \nheader1\n\\unskip}\\relax &'
|
||||||
|
'\\sphinxstylethead{\\relax \nheader2\n\\unskip}\\relax' in widths_table)
|
||||||
|
assert ('\\hline\ncell1-1\n&\ncell1-2\n\\\\' in widths_table)
|
||||||
|
assert ('\\hline\ncell2-1\n&\ncell2-2\n\\\\' in widths_table)
|
||||||
|
assert ('\\hline\ncell3-1\n&\ncell3-2\n\\\\' in widths_table)
|
||||||
|
assert ('\\hline\\end{tabulary}' in widths_table)
|
||||||
|
Loading…
Reference in New Issue
Block a user