Aht yu da etwe jkw Sphinx documentation of brad virture Sent from my BlackBerry wireless device from MTN
-----Original Message----- From: Nikolaj van Omme <[email protected]> Sender: [email protected] Date: Mon, 09 Jul 2012 10:32:57 To: Sphinx Mailing List<[email protected]> Reply-To: [email protected] Subject: [sphinx-dev] How to use a custom node with a latex(pdf) build? Hello group, I'm trying to output references differently under an html build and a latexpdf build. Something like this: rst text: " .. my_label: My title ---------- " I would like to have a reference in html like this: "See section My title" and in latex like this: "See section 2.3" I tried to use a custom node and a custom role "yref". This works with an html build but in the latex build, the files containing "yref" are disregarded and not included in the build. If I take the "yref" out of the files, they are processed as usual. The rest of my mail is a little bit long but I tried to write a minimal example of what I did. What am I doing wrong? What is the correct way to handle custom references? Thanks in advance for any help. Have a nice day, Nikolaj -------------------------------------------------------------------------------------------------------------------------- This is what I did: first I define a custom node: class ortools_ref_node(nodes.Inline, nodes.Element): def __init__(self): super(ortools_ref_node, self).__init__() self.attributes['ortools_title'] = None self.attributes['ortools_html_target'] = None self.attributes['ortools_latex_target'] = None self.attributes['ortools_type'] = None self.attributes['capital'] = None #other things not mentioned here #... then I define a custom role: class ortools_ref_role(XRefRole): def __init__(self): XRefRole.__init__(self, fix_parens=False, lowercase=False) def result_nodes(self, document, env, node, is_ref): if not is_ref: return [node], [] domain = env.domains['std'] labels = env.app.config.labels newnode = ortools_ref_node() target = node['reftarget'] newnode['reftype'] = node['reftype'] newnode['refdoc'] = node['refdoc'] newnode['reftarget'] = target if labels.has_key(target): if node['refexplicit']: title = node.astext() if title.startswith('^'): newnode['capital'] = True title = title[1:] else: title = labels[target]['title'] newnode.attributes['ortools_title'] = title reftarget = os.path.join(labels[target]['rel_path'], labels[target]['filename'][:-4]) labelid = nodes.make_id(target) html_reluri = relative_uri(node['refdoc'], reftarget) + '.html#' + str(labelid) newnode.attributes['ortools_html_target'] = html_reluri else: print "Target '" + target + "' is not defined!" return [node], [] return [newnode], [] The setup function is defined by: def setup(app): app.add_node(ortools_ref_node, html=(visit_ortools_ref_html, None), latex=(visit_ortools_ref_latex, None)) #... app.add_config_value('labels', {}, True) app.add_role('yref', ortools_role) app.connect("builder-inited", get_labels) Finally: def visit_ortools_ref_html(self, node): target = node.attributes['ortools_html_target'] title = transform_html_title(node.attributes['ortools_title']) self.body.append(u'%s' % prefix + ' <a class="reference internal" href="%s" ' % target + u'><em>%s' % title + u'</em></a>') raise nodes.SkipNode This seems to work... But the latex version doesn't work even when completely empty: def visit_ortools_ref_latex(self, node): raise nodes.SkipNode -- You received this message because you are subscribed to the Google Groups "sphinx-dev" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sphinx-dev?hl=en. -- You received this message because you are subscribed to the Google Groups "sphinx-dev" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sphinx-dev?hl=en.
