bug-auctex
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#24667: AUCTeX citation color


From: Arash Esbati
Subject: bug#24667: AUCTeX citation color
Date: Sat, 15 Oct 2016 14:53:34 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1

Hi Mosè,

Mosè Giordano <address@hidden> writes:

> 2016-10-11 12:49 GMT+02:00 Travis Knepp <address@hidden>:
>> Coloring of citations (when using \citep, \citet, etc. as opposed to just
>> using \cite) is not properly working.  Details from the stackexchange post
>> (http://emacs.stackexchange.com/questions/27591/auctex-citation-color) are
>> here:
>>
>> When inserting a reference in a LaTeX document (using Auctex) I normally
>> type:
>>
>> \cite{joebob_2010}
>>
>> where "\cite" shows up in blue font, while "joebob_2010" shows up
>> reddish/purple. I like this coloring. However, when I use
>>
>> \citep{joebob_2010}
>>
>> all text shows up white.

[...]

> If you want instead to write some Elisp, you can put this
>
> (font-latex-add-keywords
>  '(("citep" "*[[{"))
>  'reference)
>
> inside the hook.
>
> Out of curiosity, do you use natbib or jurabib packages?

First of all, sorry for my late response.  Travis uses biblatex.  And
while we're at it: Travis, how do insert this macro?  Do you type
\citep{<key>} or do you hit `C-c m RET citep RET' or use Reftex?  I'm
asking since you're asking for the fontification; I think the completion
support (see below) is much more needed.

> If you have parsing enabled, you should automatically get
> fontification of citep macro.

That was also was my first answer, but then I realized that biblatex.el
doesn't have support for natbib compat macros (cf. biblatex manual,
§3.8.9 natbib Compatibility Commands).  I asked Travis to file this bug
report (thanks btw), I think the appended patch fixes the issue.  It is
mostly taken from natbib.el, function `LaTeX-biblatex-natbib-note-args'
is a modified version of `natbib-note-args' and I think that `(when
TeX-arg-cite-note-p' is not really needed, but I didn't touch it since
it doesn't hurt either.

--8<---------------cut here---------------start------------->8---
diff --git a/style/biblatex.el b/style/biblatex.el
index 06cd57a..f0e235d 100644
--- a/style/biblatex.el
+++ b/style/biblatex.el
@@ -216,6 +216,32 @@ for citation keys."
        (TeX-argument-insert (mapconcat 'identity items ",") optional))
       (setq noinsert t))))
 
+(defun LaTeX-biblatex-natbib-note-args (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"))))
+       (cond
+        (;; Both optional args are given
+         (and pre (not (string= pre ""))
+              post (not (string= post "")))
+         (insert LaTeX-optop pre LaTeX-optcl
+                 LaTeX-optop post LaTeX-optcl))
+        (;; pre is given, post is empty: Make sure that we insert an
+         ;; extra pair of `[]', otherwise pre becomes post
+         (and pre (not (string= pre ""))
+              (string= post ""))
+         (insert LaTeX-optop pre LaTeX-optcl
+                 LaTeX-optop LaTeX-optcl))
+        (;; pre is empty, post is given
+         (and (string= pre "")
+              post (not (string= post "")))
+         (insert LaTeX-optop post LaTeX-optcl))
+        (;; both empty
+         t (ignore))))))
+
 (TeX-add-style-hook
  "biblatex"
  (lambda ()
@@ -456,6 +482,53 @@ for citation keys."
     '("DefineHyphenationExceptions"
       (TeX-arg-eval completing-read "Language: " LaTeX-biblatex-language-list) 
t)
     "NewBibliographyString")
+
+   ;; § 3.8.9 natbib Compatibility Commands
+   (when (or (LaTeX-provided-package-options-member "biblatex" "natbib")
+            (LaTeX-provided-package-options-member "biblatex" "natbib=true"))
+     (let ((cmds '(("citet" . 1) ("citet*" . 1)
+                  ("Citet" . 1) ("Citet*" . 1)
+                  ("citep" . 2) ("citep*" . 2)
+                  ("Citep" . 2) ("Citep*" . 2)
+                  ("citealt" . 1) ("citealt*" . 1)
+                  ("Citealt" . 1) ("Citealt*" . 1)
+                  ("citealp" . 2) ("citealp*" . 2)
+                  ("Citealp" . 2) ("Citealp*" . 2))))
+       ;; Taken from natbib.el:
+       (apply
+       #'TeX-add-symbols
+       (mapcar
+        (lambda (cmd)
+          (cond
+           ((= (cdr cmd) 1)
+            ;; Just one optional argument, the post note
+            (list
+             (car cmd)
+             '(TeX-arg-conditional TeX-arg-cite-note-p (["Postnote"]) nil)
+             'TeX-arg-cite))
+           ((= (cdr cmd) 2)
+            ;; Pre and post notes
+            (list
+             (car cmd)
+             '(TeX-arg-conditional TeX-arg-cite-note-p
+                                   ([LaTeX-biblatex-natbib-note-args])
+                                 nil)
+             'TeX-arg-cite))))
+        cmds))
+
+     ;; Fontification for compat macros do not go into `font-latex.el':
+     (when (and (featurep 'font-latex)
+               (eq TeX-install-font-lock 'font-latex-setup))
+       (font-latex-add-keywords '(("citet"        "*[{")
+                                 ("Citet"        "*[{")
+                                 ("citep"        "*[[{")
+                                 ("Citep"        "*[[{")
+                                 ("citealt"      "*[{")
+                                 ("Citealt"      "*[{")
+                                 ("citealp"      "*[[{")
+                                 ("Citealp"      "*[[{"))
+                               'biblatex))))
+
    (LaTeX-add-environments
     ;;; Bibliography commands
     ;; Bibliography Sections
--8<---------------cut here---------------end--------------->8---

Here also a small file I tested with:

--8<---------------cut here---------------start------------->8---
\documentclass{article}

\begin{filecontents}{biblatex-test.bib}
@book{lamp:94,
  author    = {Leslie Lamport},
  title     = {LaTeX - {A} Document Preparation System: User's Guide
               and Reference Manual, Second Edition},
  publisher = {Pearson / Prentice Hall},
  year      = {1994},
  isbn      = {978-0-201-52983-8},
  timestamp = {Fri, 08 Apr 2011 18:21:00 +0200},
}

@book{mitt:97,
  author    = {Michel Goossens and
               Sebastian Rahtz and
               Frank Mittelbach},
  title     = {The LaTeX Graphics Companion - Illustrating documents
               with TeX and PostScript},
  series    = {Addison-Wesley series on tools and techniques
               for computer typesetting},
  publisher = {Addison-Wesley},
  year      = {1997},
  isbn      = {978-0-201-85469-5},
}
\end{filecontents}

\usepackage[natbib,backend=bibtex,style=authoryear]{biblatex}

\bibliography{biblatex-test}

\begin{document}

\noindent \textbf{Textual}:\\
\citet{lamp:94}, \\
\citet[which see]{lamp:94},\\
\citet*{mitt:97}, \\
\citealt{mitt:97,lamp:94}, \\
\Citealt{mitt:97,lamp:94}

\noindent \textbf{Parenthesis}:\\
\citep{mitt:97}, \\
\citep[see][Page~5]{mitt:97}, \\
\citep*{mitt:97}, \\
\citealp{mitt:97}, \\
\Citealp{mitt:97}, \\
\citealp*{mitt:97}, \\
\Citealp*{mitt:97}

\end{document}
--8<---------------cut here---------------end--------------->8---

Best, Arash





reply via email to

[Prev in Thread] Current Thread [Next in Thread]