Hello, Richard Lawrence <richard.lawre...@berkeley.edu> writes:
> Nicolas Goaziou <m...@nicolasgoaziou.fr> writes: >> You could do the following >> >> (let ((citation (org-element-lineage (org-element-context) '(citation) t)) >> references) >> (save-excursion >> (goto-char (org-element-property :contents-begin citation)) >> (let ((end (org-element-property :contents-end citation))) >> (while (< (point) end) >> (let ((reference (org-element-lineage >> (org-element-context) '(citation-reference) t)))) >> (push reference references) >> (goto-char (org-element-property :end reference))))) >> (nreverse references)) > > Thanks! For correctness, (push ...) and (goto-char ...) obviously need to be located within the (let ...). > Just to clarify: I see that this is necessary when getting a citation > object via org-element-context, but is it also necessary in an export > context, where the whole buffer or region has already been parsed? No, with a full parse tree, `org-element-contents' on a citation object returns the list of all citation-reference objects within. > I ask because in that kind of context, I think it is generally going to > be more useful to deal with citation objects as a whole. I am not sure > we will want to treat citation-references as individual objects which > are themselves exported; instead, I think we will want to handle > exporting the citation-references in a citation all at once. I don't know. In any case, they need to be treated as regular object (e.g., they are expected to have a filter associated to them). If some back-end doesn't need to export directly citation references, it just needs to skip the relative translator. Regards, -- Nicolas Goaziou