Subject: bug#24667: AUCTeX citation color

From: Travis Knepp <[email-masked]>
Date: Mon, 17 Oct 2016 08:26:05 -0400

Arash,

     I use Reftex and apply the hook in my .emacs file.  I insert 
references via C-c [ and change the \cite to \citep or \citet as needed.

             Travis

On 10/15/2016 08:53 AM, Arash Esbati wrote:
> Hi Mosè,
>
> Mosè Giordano <[email-masked]> writes:
>
>> 2016-10-11 12:49 GMT+02:00 Travis Knepp <[email-masked]>:
>>> 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

-- 

Travis N. Knepp

Lead Research Scientist

SAGE-III on ISS <http://sage.nasa.gov/>CAPABLE Air Quality Station 
<http://capable.larc.nasa.gov/>

[email-masked] <mailto:[email-masked]>

Mail Stop 401A, B1250, Room 149
Hampton, VA 23681-2199

757-864-5558

Science Systems and Applications, Inc. (SSAI)

/Science and Technology with Passion/

10210 Greenbelt Road, Suite 600

Lanham, MD 20706

www.ssaihq.com <http://www.ssaihq.com/>

Please be mindful about forwarding this e-mail; it may contain 
confidential information that is not intended for anyone else. Thank you.