From 0d8dd33b4d752277c8f9632b726c517ff167ef07 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Thu, 5 Aug 2010 15:07:44 +0200 Subject: [PATCH] #471: Fix LaTeX references to figures. --- CHANGES | 2 ++ sphinx/writers/latex.py | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 33a3cca2c..41f0b1c4d 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,8 @@ Release 1.0.2 (in development) ============================== +* #471: Fix LaTeX references to figures. + * #482: When doing a non-exact search, match only the given type of object. diff --git a/sphinx/writers/latex.py b/sphinx/writers/latex.py index 5674b388c..03c90fe27 100644 --- a/sphinx/writers/latex.py +++ b/sphinx/writers/latex.py @@ -224,6 +224,7 @@ class LaTeXTranslator(nodes.NodeVisitor): else: self.top_sectionlevel = 1 self.next_section_ids = set() + self.next_figure_ids = set() # flags self.verbatim = None self.in_title = 0 @@ -887,11 +888,15 @@ class LaTeXTranslator(nodes.NodeVisitor): pass def visit_figure(self, node): + ids = '' + for id in self.next_figure_ids: + ids += self.hypertarget(id, anchor=False) + self.next_figure_ids.clear() if node.has_key('width') and node.get('align', '') in ('left', 'right'): self.body.append('\\begin{wrapfigure}{%s}{%s}\n\\centering' % (node['align'] == 'right' and 'r' or 'l', node['width'])) - self.context.append('\\end{wrapfigure}\n') + self.context.append(ids + '\\end{wrapfigure}\n') else: if (not node.attributes.has_key('align') or node.attributes['align'] == 'center'): @@ -903,7 +908,7 @@ class LaTeXTranslator(nodes.NodeVisitor): align = '\\begin{flush%s}' % node.attributes['align'] align_end = '\\end{flush%s}' % node.attributes['align'] self.body.append('\\begin{figure}[htbp]%s\n' % align) - self.context.append('%s\\end{figure}\n' % align_end) + self.context.append(ids + align_end + '\\end{figure}\n') def depart_figure(self, node): self.body.append(self.context.pop()) @@ -983,6 +988,11 @@ class LaTeXTranslator(nodes.NodeVisitor): self.next_section_ids.add(node['refid']) self.next_section_ids.update(node['ids']) return + elif isinstance(next, nodes.figure): + if node.get('refid'): + self.next_figure_ids.add(node['refid']) + self.next_figure_ids.update(node['ids']) + return except IndexError: pass if 'refuri' in node: