Dziękuję za wiadomość 2012/7/9, Nikolaj van Omme <[email protected]>: > 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.
