From f124b616d98aebb9509ef5884d555a3b44ae8ded Mon Sep 17 00:00:00 2001 From: "Pedro A. Aranda" Date: Thu, 25 Apr 2024 07:21:45 +0200 Subject: [PATCH] oc-biblatex: Allow native biblatex options in CITE_EXPORT * lisp/oc-biblatex.el: (org-cite-biblatex--package-options) Add support for options in the native biblatex package format. * doc/org-manual.org: Document the added format and add an example. * etc/ORG-NEWS: Announce new format for #+cite_export biblatex options. --- doc/org-manual.org | 11 ++++++++--- etc/ORG-NEWS | 6 ++++++ lisp/oc-biblatex.el | 31 +++++++++++++++++-------------- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/doc/org-manual.org b/doc/org-manual.org index a285aa4e5..786248af9 100644 --- a/doc/org-manual.org +++ b/doc/org-manual.org @@ -17631,9 +17631,14 @@ your LaTeX installation, it won't export to anything but PDF. specifies the =biblatex= export processor with the default =numeric= style and the =bibtex= backend. Always define the style first and then the rest of load-time options for the =biblatex= -package. Alternatively, use the ~org-cite-biblatex-options~ variable -in your Emacs configuration. It will only export to PDF, since it -relies on the ~biblatex~ processor of your LaTeX installation; +package. Alternatively, you can use the ~key=val,key=val~ format for +the options as documented in the =biblatex= package documentation: + +: #+cite_export: biblatex backend=bibtex,style=numeric + +The ~org-cite-biblatex-options~ variable in your Emacs configuration +uses this format. It will only export to PDF, since it relies on the +~biblatex~ processor of your LaTeX installation. ** Bibliography printing diff --git a/etc/ORG-NEWS b/etc/ORG-NEWS index 06d3cf093..fc5a86718 100644 --- a/etc/ORG-NEWS +++ b/etc/ORG-NEWS @@ -1021,6 +1021,12 @@ The option can be customized either by group or 2. by setting the file local keyword =LATEX_FOOTNOTE_COMMAND= +*** Options for ~#+cite_export: biblatex~ can use the package's option syntax + +When using =biblatex= to export bibliographies, you can use the format +as specified in the =biblatex= package documentation as +=key=val,key=val,...= + ** New features *** =ob-lua=: Support all types and multiple values in results diff --git a/lisp/oc-biblatex.el b/lisp/oc-biblatex.el index 36c0ee7e5..4755ac6b2 100644 --- a/lisp/oc-biblatex.el +++ b/lisp/oc-biblatex.el @@ -190,20 +190,23 @@ INITIAL is an initial style of comma-separated options, as a string or nil. STYLE is the style definition as a string or nil. Return a string." - (let ((options-no-style - (and initial - (let ((re (rx string-start (or "bibstyle" "citestyle" "style")))) - (seq-filter - (lambda (option) (not (string-match re option))) - (split-string (org-unbracket-string "[" "]" initial) - "," t " \t"))))) - (style-options - (cond - ((null style) nil) - ((not (string-match "/" style)) (list (concat "style=" style))) - (t - (list (concat "bibstyle=" (substring style nil (match-beginning 0))) - (concat "citestyle=" (substring style (match-end 0)))))))) + (let* ((options-no-style + (and initial + (let ((re (rx string-start (or "bibstyle" "citestyle" "style")))) + (seq-filter + (lambda (option) (not (string-match re option))) + (split-string (org-unbracket-string "[" "]" initial) + "," t " \t"))))) + ;; Check whether the string is in key=val,... + (biblatex-options-p (and (stringp style) (string-match-p "\\`[^,=]+=[^,]+\\(,[^=]+=[^,]+\\)\\'" style))) + (style-options + (cond + ((null style) nil) + ;; Assume it is a valid options string for biblatex if it is in key=val,... format + ((not (string-match "/" style)) (list (if biblatex-options-p style (concat "style=" style)))) + (t + (list (concat "bibstyle=" (substring style nil (match-beginning 0))) + (concat "citestyle=" (substring style (match-end 0)))))))) (if (or options-no-style style-options) (format "[%s]" (mapconcat #'identity