branch: externals/org
commit f124b616d98aebb9509ef5884d555a3b44ae8ded
Author: Pedro A. Aranda <paag...@gmail.com>
Commit: Ihor Radchenko <yanta...@posteo.net>

    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 a285aa4e53..786248af9a 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 06d3cf0935..fc5a86718e 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 36c0ee7e55..4755ac6b28 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

Reply via email to