Commits

Georg Brandl committed aa25ad2

Consistently id-escape all hypertarget names.

Comments (0)

Files changed (1)

sphinx/writers/latex.py

                 # cite_key: underscores must not be escaped
                 cite_key = bi[0].replace(r"\_", "_")
                 self.body.append('\\bibitem[%s]{%s}{\hypertarget{%s}{} %s}\n' %
-                                 (bi[0], cite_key, cite_key.lower(), bi[1]))
+                                 (bi[0], cite_key,
+                                  self.idescape(cite_key.lower()), bi[1]))
             self.body.append('\\end{thebibliography}\n')
             self.bibitems = []
 
             self.sectionlevel += 1
         self.body.append('\n\n')
         if self.next_section_target:
-            self.body.append(r'\hypertarget{%s}{}' % self.next_section_target)
+            self.body.append(r'\hypertarget{%s}{}' %
+                             self.idescape(self.next_section_target))
             self.next_section_target = None
         #if node.get('ids'):
         #    for id in node['ids']:
     def visit_module(self, node):
         modname = node['modname']
         self.body.append('\n\\hypertarget{module-%s}{}' %
-                         (modname.replace(' ','')))
+                         self.idescape(modname.replace(' ','')))
         self.body.append('\n\\declaremodule[%s]{}{%s}' % (
             modname.replace('_', ''), self.encode(modname)))
         self.body.append('\n\\modulesynopsis{%s}' %
             # indexing uses standard LaTeX index markup, so the targets
             # will be generated differently
             if not id.startswith('index-'):
-                self.body.append(r'\hypertarget{%s}{}' % id)
+                self.body.append(r'\hypertarget{%s}{}' % self.idescape(id))
 
         if node.has_key('refid') and node['refid'] not in self.written_ids:
             parindex = node.parent.index(node)