From: engelbert g. <gr...@us...> - 2004-06-07 17:04:50
|
Update of /cvsroot/docutils/docutils/docutils/writers In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26749/docutils/writers Modified Files: latex2e.py Log Message: Add use-LaTeX-citations option. Index: latex2e.py =================================================================== RCS file: /cvsroot/docutils/docutils/docutils/writers/latex2e.py,v retrieving revision 1.101 retrieving revision 1.102 diff -u -d -r1.101 -r1.102 --- latex2e.py 3 Jun 2004 09:31:23 -0000 1.101 +++ latex2e.py 7 Jun 2004 17:04:09 -0000 1.102 @@ -47,6 +47,11 @@ ['--footnote-references'], {'choices': ['superscript', 'brackets'], 'default': 'brackets', 'metavar': '<format>'}), + ('Use LaTeX citations. ' + 'Default: no, uses figures which might get mixed with images.', + ['--use-latex-citations'], + {'default': 0, 'action': 'store_true', + 'validator': frontend.validate_boolean}), ('Format for block quote attributions: one of "dash" (em-dash ' 'prefix), "parentheses"/"parens", or "none". Default is "dash".', ['--attribution'], @@ -520,6 +525,7 @@ self.use_latex_toc = settings.use_latex_toc self.use_latex_docinfo = settings.use_latex_docinfo self.use_latex_footnotes = settings.use_latex_footnotes + self._use_latex_citations = settings.use_latex_citations self.hyperlink_color = settings.hyperlink_color self.compound_enumerators = settings.compound_enumerators self.section_prefix_for_enumerators = ( @@ -639,6 +645,8 @@ # them into a compound enumeration self._enumeration_counters = [] + self._bibitems = [] + # docinfo. self.docinfo = None # inside literal block: no quote mangling. @@ -880,30 +888,46 @@ def depart_caution(self, node): self.depart_admonition() - def visit_citation(self, node): - # TODO maybe use cite bibitems - self.body.append('\\begin{figure}[b]') - self.body.append('\\hypertarget{%s}' % node['id']) - - def depart_citation(self, node): - self.body.append('\\end{figure}\n') - def visit_title_reference(self, node): self.body.append( '\\titlereference{' ) def depart_title_reference(self, node): self.body.append( '}' ) + def visit_citation(self, node): + # TODO maybe use cite bibitems + if self._use_latex_citations: + self.context.append(len(self.body)) + else: + self.body.append('\\begin{figure}[b]') + self.body.append('\\hypertarget{%s}' % node['id']) + + def depart_citation(self, node): + if self._use_latex_citations: + size = self.context.pop() + label = self.body[size] + text = ''.join(self.body[size+1:]) + del self.body[size:] + self._bibitems.append([label, text]) + else: + self.body.append('\\end{figure}\n') + def visit_citation_reference(self, node): - href = '' - if node.has_key('refid'): - href = node['refid'] - elif node.has_key('refname'): - href = self.document.nameids[node['refname']] - self.body.append('[\\hyperlink{%s}{' % href) + if self._use_latex_citations: + self.body.append('\\cite{') + else: + href = '' + if node.has_key('refid'): + href = node['refid'] + elif node.has_key('refname'): + href = self.document.nameids[node['refname']] + self.body.append('[\\hyperlink{%s}{' % href) def depart_citation_reference(self, node): - self.body.append('}]') + if self._use_latex_citations: + self.body.append('}') + else: + self.body.append('}]') def visit_classifier(self, node): self.body.append( '(\\textbf{' ) @@ -1047,6 +1071,16 @@ self.body.append('\n\\setlength{\\locallinewidth}{\\linewidth}\n') def depart_document(self, node): + if self._use_latex_citations: + widest_label = "" + for bi in self._bibitems: + if len(widest_label)<len(bi[0]): + widest_label = bi[0] + self.body.append('\n\\begin{thebibliography}{%s}\n'%widest_label) + for bi in self._bibitems: + self.body.append('\\bibitem[%s]{%s}{%s}\n' % (bi[0], bi[0], bi[1])) + self.body.append('\\end{thebibliography}\n') + self.body_suffix.append('\\end{document}\n') def visit_emphasis(self, node): @@ -1281,9 +1315,14 @@ def visit_label(self, node): if isinstance(node.parent, nodes.footnote) and self.use_latex_footnotes: raise nodes.SkipNode - self.body.append('[') + elif isinstance(node.parent, nodes.citation) and self._use_latex_citations: + pass + else: + self.body.append('[') def depart_label(self, node): + if isinstance(node.parent, nodes.citation) and self._use_latex_citations: + return self.body.append(']') # elements generated by the framework e.g. section numbers. |