From: Christian Moe <mail@christianmoe.com>
To: "emacs-orgmode@gnu.org" <emacs-orgmode@gnu.org>
Subject: Org-cite (oc-csl) tip: Filtering bibliography for language
Date: Mon, 19 Dec 2022 15:48:37 +0100 [thread overview]
Message-ID: <87k02njvp6.fsf@christianmoe.com> (raw)
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
next reply other threads:[~2022-12-19 14:49 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-19 14:48 Christian Moe [this message]
2022-12-19 22:05 ` Org-cite (oc-csl) tip: Filtering bibliography for language András Simonyi
2022-12-19 22:20 ` András Simonyi
2022-12-20 8:23 ` Denis Maier
2022-12-20 9:47 ` András Simonyi
2022-12-20 10:22 ` Timothy
2022-12-20 10:46 ` Christian Moe
2023-01-18 19:39 ` András Simonyi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87k02njvp6.fsf@christianmoe.com \
--to=mail@christianmoe.com \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).