[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Org-cite (oc-csl) tip: Filtering bibliography for language
From: |
Christian Moe |
Subject: |
Org-cite (oc-csl) tip: Filtering bibliography for language |
Date: |
Mon, 19 Dec 2022 15:48:37 +0100 |
User-agent: |
mu4e 1.2.0; emacs 27.2 |
Hi,
A tip some of you might find useful:
I wanted to separate sub-bibliographies by language, which is not one of
the out-of-the-box available properties of the PRINT_BIBLIOGRAPHY
keyword.[fn:1] Specifically, I wanted to filter out Norwegian items into
one subbibliography and non-Norwegian ones into another in the same
document.[fn:2]
I found out how to do it with the `PRINT_BIBLIOGRAPHY: :filter
<predicate>' property, which turns out to be used in the function
citeproc-sb--match-p, where it is applied to a var-value list.
I defined a predicate for Norwegian, bibitem-norwegian-p, that matches a
regexp for various labels for Norwegian[fn:3] against the language
value.
#+begin_src elisp
(defun bibitem-norwegian-p (vv)
"Returns non-nil (0) if a bibliography item is in
Norwegian. For use in an org-cite PRINT_BIBLIOGRAPHY filter."
(let ((itemlang (alist-get 'language vv)))
(and itemlang (string-match "n[obn][r-bo]?" itemlang))))
#+end_src
Then I could successfully use it as follows:
#+PRINT_BIBLIOGRAPHY: :filter bibitem-norwegian-p
For the list of non-Norwegian items I just needed to define a complementary
function:
#+begin_src elisp
(defun bibitem-not-norwegian-p (vv)
(not (bibitem-norwegian-p vv)))
#+begin_src elisp
#+PRINT_BIBLIOGRAPHY: :filter bibitem-not-norwegian-p
Adapt as needed for other languages and use cases.
Refinements welcome. I'm especially wondering what would be an elegant
way to generalize this for more languages without defining a predicate
for each language (given that we cannot pass the language as an
additional argument in the print_bibliography line).
* Footnotes
[fn:1] [[info:org#Bibliography options in the ``biblatex'' and ``csl''
export processors]]
[fn:2] For this to work at all, of course, your CSL JSON or BibTeX has
to contain language information on the items; it should, or English
formatting such as title-casing might be applied inappropriately to
non-English items by some styles.
[fn:3] The regexp is complicated because Norwegian is complicated, my
labeling is inconsistent and I want to match at least no, nb, nn, no-NO,
nb-NO, nn-NO, nor, nob, nno, norsk and Norwegian ...
Yours,
Christian
- Org-cite (oc-csl) tip: Filtering bibliography for language,
Christian Moe <=