Hi Gustavo, gusbrs <gusbrs.2...@gmail.com> writes:
> Oh, reading the old thread was a little embarrassing. I didn't even > know how to reply to a mailing list (full html contents at the end, > etc., sigh... ;-). Wait another year or two, and you'll be writing Mails within Emacs ;-) > I did test things and the TL;DR is: looks good to me. Thanks, I installed that change on Emacs master, commit 7236010d2e. > I did not attempt to test for possible side effects in other areas, > given that `reftex-move-to-previous-arg' and `reftex-what-macro' are > general purpose utility functions. But I think the patch at hand is > pretty careful in changing the syntax of the parentheses only locally. > That's what I'd do too and my assessment is that I see no reason it > shouldn't be safe. Thanks, this is/was also my impression; hopefully no side-effects. > The only other thing of note I observed is that the mcite-like > citation commands are not fontified as reference/citation commands > (they get only the generic `font-latex-sedate-face'). I had agreed > with you that the case is tricky and arguably not worth the trouble on > RefTeX's side of things. But fontification for them should be trivial. > So, why not? Ok, I had another look, and biblatex manual says on page 120: In contrast to that, a biblatex entry set is an entity in its own right. So I think the change attached gives sort of support for mcite-like macros, incl. fontification. Do you want to give it a roll? Please ignore the re-indent changes. > Nice, perhaps something useful comes out of it. I'll share the code > first and comment later. Thanks, I will read through it later. I'd like to address the issues in this report and close it before we proceed. > I'm using `el-patch' in my config, but it should be easy enough to > read, even if you are not acquainted with it. Yes, I think I get the message. > Net of this kind of stuff are some things which accumulated over time, > to add support to specific packages, or fixing things I didn't like. > In hindsight, my general take on those is that RefTeX seems to presume > that only the standard, or very traditional, reference and citation > commands exist and, hence, chooses to hard-code most of the relevant > behavior, making it very hard to extend and tweak. Inaccessible to the > less daring users and, more importantly, to AUCTeX style files. Yes, this is true: RefTeX hardcodes plenty of stuff. > I recall you questioning somewhat the relevance of this peculiar > notation of biblatex's citation lists > (https://lists.gnu.org/archive/html/auctex-devel/2023-05/msg00015.html) > so, as a regular user of them, I'm glad and thankful to see you soften > a little your stance in this regard. TBH, I still don't want to touch font-latex.el in order to make fontification for cite-lists work, but we have an imperfect solution in place which hopefully is enough for you and other users :-) Again, thank you for your support. Best, Arash
diff --git a/style/biblatex.el b/style/biblatex.el index 31180226..7f9d4145 100644 --- a/style/biblatex.el +++ b/style/biblatex.el @@ -237,20 +237,56 @@ for citation keys." (TeX-argument-insert (mapconcat #'identity items ",") optional)) (setq noinsert t)))) +;; Support for mcite-like Citation Commands, see § 3.9.10 of Biblatex +;; reference manual. +(defun LaTeX-arg-biblatex-mcite (optional) + "Query and insert the mandatory argument of \\mcite compat macros." + (let ((set-name (TeX-read-string + (TeX-argument-prompt optional nil "Set"))) + (read-cite (lambda (opt) + (if (and (fboundp 'reftex-citation) + (fboundp 'reftex-plug-flag) + (reftex-plug-flag 3)) + (reftex-citation t) + (TeX-completing-read-multiple + (TeX-argument-prompt opt nil "Key(s)") + (LaTeX-bibitem-list))))) + cite-keys arg) + (cond ((and (not (string-empty-p set-name)) + (y-or-n-p "Add citation keys to the set name?")) + ;; We want \mcite{set-name,*key1,*key2,*key3} + (setq cite-keys (funcall read-cite optional)) + (when cite-keys + (setq cite-keys (mapcar (lambda (x) (concat "*" x)) + cite-keys))) + (setq arg (concat set-name + (when cite-keys + (concat "," (mapconcat #'identity + cite-keys + ",")))))) + ;; We want \mcite{key1}. FIXME: Are multiple keys + ;; allowed? + ((string-empty-p set-name) + (setq arg (mapconcat #'identity + (funcall read-cite optional) + ","))) + (t (setq arg ""))) + (TeX-argument-insert arg optional))) + (defun LaTeX-arg-biblatex-natbib-notes (optional) "Prompt for two note arguments of a natbib compat citation command." (when TeX-arg-cite-note-p - (let ((pre (TeX-read-string - (TeX-argument-prompt optional nil "Prenote"))) - (post (TeX-read-string - (TeX-argument-prompt optional nil "Postnote")))) - (TeX-argument-insert pre optional) - (TeX-argument-insert post optional) - ;; pre is given, post is empty: Make sure that we insert an - ;; extra pair of `[]', otherwise pre becomes post - (when (and pre (not (string= pre "")) - (string= post "")) - (insert LaTeX-optop LaTeX-optcl))))) + (let ((pre (TeX-read-string + (TeX-argument-prompt optional nil "Prenote"))) + (post (TeX-read-string + (TeX-argument-prompt optional nil "Postnote")))) + (TeX-argument-insert pre optional) + (TeX-argument-insert post optional) + ;; pre is given, post is empty: Make sure that we insert an + ;; extra pair of `[]', otherwise pre becomes post + (when (and pre (not (string= pre "")) + (string= post "")) + (insert LaTeX-optop LaTeX-optcl))))) (TeX-add-style-hook "biblatex" @@ -334,32 +370,45 @@ for citation keys." (TeX-arg-completing-read-multiple (LaTeX-bibitem-list) "Keys")) ;;; Citation Commands '("cite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Cite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("parencite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Parencite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("footcite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("footcitetext" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) ;; Style-specific Commands '("textcite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Textcite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("smartcite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Smartcite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("cite*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("parencite*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("supercite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) ;; Qualified Citation Lists '("cites" LaTeX-arg-biblatex-cites) '("Cites" LaTeX-arg-biblatex-cites) @@ -374,45 +423,62 @@ for citation keys." '("supercites" LaTeX-arg-biblatex-cites) ;; Style-independent Commands '("autocite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Autocite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("autocite*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Autocite*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("autocites" LaTeX-arg-biblatex-cites) '("Autocites" LaTeX-arg-biblatex-cites) ;; Text Commands '("citeauthor" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Citeauthor" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citeauthor*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Citeauthor*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citetitle" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citetitle*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citeyear" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citeyear*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citedate" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citedate*" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("citeurl" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("parentext" "Text") '("brackettext" "Text") ;; Special Commands '("fullcite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("footfullcite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("volcite" (TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume" (TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite) @@ -450,15 +516,20 @@ for citation keys." (TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume" (TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite) '("notecite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Notecite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("pnotecite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("Pnotecite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) '("fnotecite" (TeX-arg-conditional TeX-arg-cite-note-p - (["Prenote"] ["Postnote"]) ()) TeX-arg-cite) + (["Prenote"] ["Postnote"]) ()) + TeX-arg-cite) ;; Low-level Commands '("citename" (TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"] ["Postnote"]) ()) @@ -522,8 +593,8 @@ for citation keys." (list (car cmd) '(TeX-arg-conditional TeX-arg-cite-note-p - ([LaTeX-arg-biblatex-natbib-notes]) - nil) + ([LaTeX-arg-biblatex-natbib-notes]) + nil) #'TeX-arg-cite)))) cmds)) @@ -540,6 +611,44 @@ for citation keys." ("Citealp" "*[[{")) 'biblatex)))) + ;; § 3.9.10 mcite-like Citation Commands + (when (or (LaTeX-provided-package-options-member "biblatex" "mcite") + (LaTeX-provided-package-options-member "biblatex" "mcite=true")) + (let ((cmds '("mcite" "Mcite" + "mparencite" "Mparencite" + "mfootcite" "mfootcitetext" + "mtextcite" "Mtextcite" + "msupercite" + "mautocite" "Mautocite")) + (spec "*[[{")) + ;; Add the macros incl. optional arguments: + (apply #'TeX-add-symbols + (mapcar + (lambda (cmd) + (list cmd + '(TeX-arg-conditional TeX-arg-cite-note-p + (["Prenote"] ["Postnote"]) + nil) + #'LaTeX-arg-biblatex-mcite)) + cmds)) + ;; Cater for the starred versions as well: + (apply #'TeX-add-symbols + (mapcar + (lambda (cmd) + (list (concat cmd "*") + '(TeX-arg-conditional TeX-arg-cite-note-p + (["Prenote"] ["Postnote"]) + nil) + #'LaTeX-arg-biblatex-mcite)) + cmds)) + ;; Fontification for compat macros does not go into `font-latex.el': + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords (mapcar (lambda (cmd) + (list cmd spec)) + cmds) + 'biblatex)))) + (LaTeX-add-environments ;;; Bibliography commands ;; Bibliography Sections
_______________________________________________ bug-auctex mailing list bug-auctex@gnu.org https://lists.gnu.org/mailman/listinfo/bug-auctex