mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add multirow / multicol support for latex
This commit is contained in:
parent
f1ba8a4fcc
commit
654034c976
@ -40,6 +40,7 @@ HEADER = r'''%% Generated by Sphinx.
|
|||||||
%(fncychap)s
|
%(fncychap)s
|
||||||
%(longtable)s
|
%(longtable)s
|
||||||
\usepackage{sphinx}
|
\usepackage{sphinx}
|
||||||
|
\usepackage{multirow}
|
||||||
%(preamble)s
|
%(preamble)s
|
||||||
|
|
||||||
\title{%(title)s}
|
\title{%(title)s}
|
||||||
@ -251,6 +252,9 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
self.no_contractions = 0
|
self.no_contractions = 0
|
||||||
self.compact_list = 0
|
self.compact_list = 0
|
||||||
self.first_param = 0
|
self.first_param = 0
|
||||||
|
self.previous_spanning_row = 0
|
||||||
|
self.previous_spanning_column = 0
|
||||||
|
self.remember_multirow = {}
|
||||||
|
|
||||||
def astext(self):
|
def astext(self):
|
||||||
return (HEADER % self.elements +
|
return (HEADER % self.elements +
|
||||||
@ -715,22 +719,41 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
def visit_row(self, node):
|
def visit_row(self, node):
|
||||||
self.table.col = 0
|
self.table.col = 0
|
||||||
def depart_row(self, node):
|
def depart_row(self, node):
|
||||||
|
if self.previous_spanning_row == 1:
|
||||||
|
self.previous_spanning_row = 0
|
||||||
|
self.body.append('\\\\\n')
|
||||||
|
else:
|
||||||
self.body.append('\\\\\\hline\n')
|
self.body.append('\\\\\\hline\n')
|
||||||
self.table.rowcount += 1
|
self.table.rowcount += 1
|
||||||
|
|
||||||
def visit_entry(self, node):
|
def visit_entry(self, node):
|
||||||
if 'morerows' in node or 'morecols' in node:
|
if self.remember_multirow.has_key('0') and self.remember_multirow['0'] > 1:
|
||||||
raise UnsupportedError('%s:%s: column or row spanning cells are '
|
self.body.append(' & ')
|
||||||
'not yet implemented.' %
|
|
||||||
(self.curfilestack[-1], node.line or ''))
|
|
||||||
if self.table.col > 0:
|
if self.table.col > 0:
|
||||||
self.body.append(' & ')
|
self.body.append(' & ')
|
||||||
self.table.col += 1
|
self.table.col += 1
|
||||||
|
self.context.append('')
|
||||||
|
if 'morerows' in node:
|
||||||
|
self.body.append(' \multirow{')
|
||||||
|
self.previous_spanning_row = 1
|
||||||
|
self.body.append(str(node.get('morerows') + 1))
|
||||||
|
self.body.append('}{*}{')
|
||||||
|
self.context.append('}')
|
||||||
|
self.remember_multirow[str(self.table.col)] = node.get('morerows') + 1;
|
||||||
|
if 'morecols' in node:
|
||||||
|
self.body.append(' \multicolumn{')
|
||||||
|
self.body.append(str(node.get('morecols') + 1))
|
||||||
|
if self.table.col == 1:
|
||||||
|
self.body.append('}{|l|}{')
|
||||||
|
else:
|
||||||
|
self.body.append('}{l|}{')
|
||||||
|
self.context.append('}')
|
||||||
if isinstance(node.parent.parent, nodes.thead):
|
if isinstance(node.parent.parent, nodes.thead):
|
||||||
self.body.append('\\textbf{')
|
self.body.append('\\textbf{')
|
||||||
self.context.append('}')
|
self.context.append('}')
|
||||||
else:
|
if self.remember_multirow.has_key(str(self.table.col + 1)) and self.remember_multirow[str(self.table.col + 1)] > 1:
|
||||||
self.context.append('')
|
self.remember_multirow[str(self.table.col + 1)] -= 1
|
||||||
|
self.context.append(' & ')
|
||||||
def depart_entry(self, node):
|
def depart_entry(self, node):
|
||||||
self.body.append(self.context.pop()) # header
|
self.body.append(self.context.pop()) # header
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user