Fix paragraphs in table cell doesn't work in Latex output (ref #1574)

This commit is contained in:
Takeshi KOMIYA 2015-12-23 23:32:48 +09:00
parent b0f376fdb8
commit e41f831fc4

View File

@ -42,6 +42,7 @@ HEADER = r'''%% Generated by Sphinx.
%(longtable)s %(longtable)s
\usepackage{sphinx} \usepackage{sphinx}
\usepackage{multirow} \usepackage{multirow}
\usepackage{eqparbox}
%(usepackages)s %(usepackages)s
%(contentsname)s %(contentsname)s
%(numfig_format)s %(numfig_format)s
@ -396,6 +397,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.in_caption = 0 self.in_caption = 0
self.in_container_literal_block = 0 self.in_container_literal_block = 0
self.in_term = 0 self.in_term = 0
self.in_merged_cell = 0
self.first_document = 1 self.first_document = 1
self.this_is_the_title = 1 self.this_is_the_title = 1
self.literal_whitespace = 0 self.literal_whitespace = 0
@ -1074,6 +1076,13 @@ class LaTeXTranslator(nodes.NodeVisitor):
if 'morerows' in node: if 'morerows' in node:
self.remember_multirowcol[self.table.col] = node.get('morecols') self.remember_multirowcol[self.table.col] = node.get('morecols')
self.table.col += node.get('morecols') self.table.col += node.get('morecols')
if (('morecols' in node or 'morerows' in node) and
(len(node) > 2 or len(node.astext().split('\n')) > 2)):
self.in_merged_cell = 1
self.literal_whitespace += 1
self.body.append('\\eqparbox{%d}{\\vspace{.5\\baselineskip}\n' % id(node))
self.pushbody([])
context += '}'
if isinstance(node.parent.parent, nodes.thead): if isinstance(node.parent.parent, nodes.thead):
if len(node) == 1 and isinstance(node[0], nodes.paragraph) and node.astext() == '': if len(node) == 1 and isinstance(node[0], nodes.paragraph) and node.astext() == '':
pass pass
@ -1093,6 +1102,16 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.context.append(context) self.context.append(context)
def depart_entry(self, node): def depart_entry(self, node):
if self.in_merged_cell:
self.in_merged_cell = 0
self.literal_whitespace -= 1
body = self.popbody()
# Remove empty lines from top of merged cell
while body and body[0] == "\n":
body.pop(0)
for line in body:
line = re.sub(u'(?<!~\\\\\\\\)\n', u'~\\\\\\\\\n', line) # escape return code
self.body.append(line)
self.body.append(self.context.pop()) # header self.body.append(self.context.pop()) # header
def visit_acks(self, node): def visit_acks(self, node):