644 lines
29 KiB
EmacsLisp
644 lines
29 KiB
EmacsLisp
;;; biblatex.el --- AUCTeX style for `biblatex.sty' version 2.8a. -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 2012-2022 Free Software Foundation, Inc.
|
|
|
|
;; Author: Ralf Angeli <angeli@caeruleus.net>
|
|
;; Maintainer: auctex-devel@gnu.org
|
|
;; Created: 2012-11-14
|
|
;; Keywords: tex
|
|
|
|
;; This file is part of AUCTeX.
|
|
|
|
;; AUCTeX is free software; you can redistribute it and/or modify it
|
|
;; under the terms of the GNU General Public License as published by
|
|
;; the Free Software Foundation; either version 3, or (at your option)
|
|
;; any later version.
|
|
|
|
;; AUCTeX is distributed in the hope that it will be useful, but
|
|
;; WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
;; General Public License for more details.
|
|
|
|
;; You should have received a copy of the GNU General Public License
|
|
;; along with AUCTeX; see the file COPYING. If not, write to the Free
|
|
;; Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
;; 02110-1301, USA.
|
|
|
|
;;; Commentary:
|
|
|
|
;; This file adds support for `biblatex.sty' version 2.8a.
|
|
|
|
;;; Code:
|
|
|
|
(require 'tex)
|
|
(require 'latex)
|
|
|
|
;; Silence the compiler:
|
|
(declare-function font-latex-add-keywords
|
|
"font-latex"
|
|
(keywords class))
|
|
|
|
(defvar reftex-cite-format-builtin)
|
|
|
|
(defvar LaTeX-biblatex-entrytype
|
|
'(;; Regular Types
|
|
"article" "book" "mvbook" "inbook" "bookinbook" "suppbook" "booklet"
|
|
"collection" "mvcollection" "incollection" "suppcollection" "manual" "misc"
|
|
"online" "patent" "periodical" "suppperiodical" "proceedings"
|
|
"mvproceedings" "inproceedings" "reference" "mvreference" "inreference"
|
|
"report" "set" "thesis" "unpublished" "xdata" "customa" "customb" "customc"
|
|
"customd" "custome" "customf"
|
|
;; Type Aliases
|
|
"conference" "electronic" "masterthesis" "phdthesis" "techreport" "www"
|
|
;; Unsupported Types
|
|
"artwork" "audio" "bibnote" "commentary" "image" "jurisdiction"
|
|
"legislation" "legal" "letter" "movie" "music" "performance" "review"
|
|
"software" "standard" "video")
|
|
"List of biblatex entry types.")
|
|
|
|
(defvar LaTeX-biblatex-executebibliographyoptions-options
|
|
'(;; General
|
|
("sorting" ("nty" "nyt" "nyvt" "anyt" "anyvt" "ynt" "ydnt" "none" "debug"))
|
|
("sortcase" ("true" "false"))
|
|
("sortupper" ("true" "false"))
|
|
("sortlocale")
|
|
("sortlos" ("bib" "los"))
|
|
("related" ("true" "false"))
|
|
("sortcites" ("true" "false"))
|
|
("maxnames")
|
|
("minnames")
|
|
("maxbibnames")
|
|
("minbibnames")
|
|
("maxcitenames")
|
|
("mincitenames")
|
|
("maxitems")
|
|
("minitems")
|
|
("autocite" ("plain" "inline" "footnote" "superscript"))
|
|
("autopunct" ("true" "false"))
|
|
("language" (append LaTeX-biblatex-language-list
|
|
'("autobib" "autocite" "auto")))
|
|
("clearlang" ("true" "false"))
|
|
("autolang" ("none" "hyphen" "other" "other*" "langname"))
|
|
("block" ("none" "space" "par" "nbpar" "ragged"))
|
|
("notetype" ("foot+end" "footonly" "endonly"))
|
|
("hyperref" ("true" "false" "auto"))
|
|
("backref" ("true" "false"))
|
|
("backrefstyle" ("none" "three" "two" "two+" "three+" "all+"))
|
|
("backrefsetstyle" ("setonly" "memonly" "setormem" "setandmem" "memandset"
|
|
"setplusmem"))
|
|
("indexing" ("true" "false" "cite" "bib"))
|
|
("loadfiles" ("true" "false"))
|
|
("refsection" ("none" "part" "chapter" "section" "subsection"))
|
|
("refsegment" ("none" "part" "chapter" "section" "subsection"))
|
|
("citereset" ("none" "part" "chapter" "section" "subsection"))
|
|
("abbreviate" ("true" "false"))
|
|
("date" ("short" "long" "terse" "comp" "iso8601"))
|
|
("datelabel" ("year" "short" "long" "terse" "comp" "iso8601"))
|
|
("origdate" ("short" "long" "terse" "comp" "iso8601"))
|
|
("eventdate" ("short" "long" "terse" "comp" "iso8601"))
|
|
("urldate" ("short" "long" "terse" "comp" "iso8601"))
|
|
("alldates" ("short" "long" "terse" "comp" "iso8601"))
|
|
("datezeros" ("true" "false"))
|
|
("dateabbrev" ("true" "false"))
|
|
("defernumbers" ("true" "false"))
|
|
("punctfont" ("true" "false"))
|
|
("arxiv" ("abs" "ps" "pdf" "format"))
|
|
("texencoding" ("auto"))
|
|
("bibencoding" ("auto"))
|
|
("safeinputenc" ("true" "false"))
|
|
("bibwarn" ("true" "false"))
|
|
("mincrossrefs")
|
|
;; Style-specific
|
|
("isbn" ("true" "false"))
|
|
("url" ("true" "false"))
|
|
("doi" ("true" "false"))
|
|
("eprint" ("true" "false"))
|
|
;; Internal
|
|
("pagetracker" ("true" "false" "page" "spread"))
|
|
("citecounter" ("true" "false" "context"))
|
|
("citetracker" ("true" "false" "context" "strict" "constrict"))
|
|
("ibidtracker" ("true" "false" "context" "strict" "constrict"))
|
|
("opcittracker" ("true" "false" "context" "strict" "constrict"))
|
|
("loccittracker" ("true" "false" "context" "strict" "constrict"))
|
|
("idemtracker" ("true" "false" "context" "strict" "constrict"))
|
|
("parentracker" ("true" "false"))
|
|
("maxparens")
|
|
("firstinits" ("true" "false"))
|
|
("sortfirstinits" ("true" "false"))
|
|
("terseinits" ("true" "false"))
|
|
("labelalpha" ("true" "false"))
|
|
("maxalphanames")
|
|
("minalphanames")
|
|
("labelnumber" ("true" "false"))
|
|
("labeltitle" ("true" "false"))
|
|
("labeltitleyear" ("true" "false"))
|
|
("labeldate" ("true" "false"))
|
|
("singletitle" ("true" "false"))
|
|
("uniquename" ("true" "false" "init" "full" "allinit" "allfull" "mininit"
|
|
"minfull"))
|
|
("uniquelist" ("true" "false" "minyear")))
|
|
"Key=value options for ExecuteBibliographyOptions macro of the biblatex package.")
|
|
|
|
;; See table 2 of Biblatex reference manual.
|
|
(defvar LaTeX-biblatex-language-list
|
|
'("catalan" "croatian" "czech" "danish" "dutch" "american" "british"
|
|
"canadian" "australian" "newzealand" "finnish" "french" "german" "austrian"
|
|
"ngerman" "naustrian" "greek" "italian" "norwegian" "polish" "brazilian"
|
|
"portuguese" "russian" "spanish" "swedish")
|
|
"List of languages supported by biblatex packages.")
|
|
|
|
(defvar LaTeX-biblatex-addbibresource-options
|
|
'(("label")
|
|
("location" ("local" "remote"))
|
|
("type" ("file"))
|
|
("datatype" ("bibtex" "ris" "zoterordfxml" "endnotexml")))
|
|
"Key=value options for addbibresource macro of the biblatex package.")
|
|
|
|
(defun LaTeX-arg-addbibresource (optional &optional prompt)
|
|
"Prompt for a BibLaTeX database file.
|
|
If OPTIONAL is non-nil, insert the resulting value as an optional
|
|
argument, otherwise as a mandatory one. Use PROMPT as the prompt
|
|
string."
|
|
(let (files inputs database)
|
|
(if LaTeX-using-Biber
|
|
(setq files 'TeX-Biber-global-files
|
|
inputs 'biberinputs)
|
|
(setq files 'BibTeX-global-files
|
|
inputs 'bibinputs))
|
|
(setq files 'TeX-Biber-global-files
|
|
inputs 'biberinputs)
|
|
(message "Searching for BibLaTeX files...")
|
|
(or (symbol-value files)
|
|
(set files (mapcar #'list (TeX-search-files-by-type
|
|
'biberinputs 'global t nil))))
|
|
(message "Searching for BibLaTeX files...done")
|
|
(setq database (completing-read
|
|
(TeX-argument-prompt optional prompt "BibLaTeX files")
|
|
(append (mapcar #'list (TeX-search-files-by-type
|
|
inputs 'local t nil))
|
|
(symbol-value files))))
|
|
(LaTeX-add-bibliographies database)
|
|
;; Run style file associated to the bibliography database file in order to
|
|
;; immediately fill `LaTeX-bibitem-list'. We need to strip the extension
|
|
;; because AUCTeX style files don't use it.
|
|
(TeX-run-style-hooks (file-name-sans-extension database))
|
|
(TeX-argument-insert database optional)))
|
|
|
|
;; Support for multicite commands, see § 3.7.3 of Biblatex reference manual.
|
|
(defun LaTeX-arg-biblatex-cites (optional &optional prompt)
|
|
"Prompt for citations with completion until input is empty.
|
|
Prompt also for optional prenotes and postnotes. If OPTIONAL is
|
|
non-nil, insert the citation key as an optional argument,
|
|
otherwise as a mandatory one. Use PROMPT as the prompt string
|
|
for citation keys."
|
|
;; Prompt for global prenote and postnote.
|
|
(and TeX-arg-cite-note-p (not current-prefix-arg)
|
|
(let ((TeX-arg-opening-brace "(")
|
|
(TeX-arg-closing-brace ")")
|
|
(prenote (TeX-read-string
|
|
(TeX-argument-prompt t nil "Global prenote"))))
|
|
(TeX-argument-insert prenote t)
|
|
;; If the prenote is empty the postnote is optional, otherwise it's
|
|
;; mandatory.
|
|
(TeX-argument-insert
|
|
(TeX-read-string (TeX-argument-prompt t nil "Global postnote"))
|
|
(equal prenote ""))))
|
|
(let ((items t) (noinsert nil))
|
|
(while items
|
|
;; Prompt for prenote and postnote of the current keys.
|
|
(and TeX-arg-cite-note-p (not current-prefix-arg)
|
|
(let ((TeX-arg-opening-brace "[")
|
|
(TeX-arg-closing-brace "]")
|
|
(prenote (TeX-read-string
|
|
(TeX-argument-prompt t nil "Prenote"))))
|
|
(TeX-argument-insert prenote t)
|
|
;; If the prenote is empty the postnote is optional, otherwise it's
|
|
;; mandatory.
|
|
(TeX-argument-insert
|
|
(TeX-read-string (TeX-argument-prompt t nil "Postnote"))
|
|
(equal prenote ""))))
|
|
(setq items (if (and (fboundp 'reftex-citation)
|
|
(fboundp 'reftex-plug-flag)
|
|
(reftex-plug-flag 3))
|
|
;; Use RefTeX when enabled.
|
|
(reftex-citation t)
|
|
;; Multiple citation keys in each argument are allowed.
|
|
(TeX-completing-read-multiple
|
|
(TeX-argument-prompt optional prompt "Key(s)")
|
|
(LaTeX-bibitem-list))))
|
|
(apply #'LaTeX-add-bibitems items)
|
|
;; If input is empty, insert an empty group only the first time, when
|
|
;; `noinsert' flag is nil.
|
|
(unless (and (not items) noinsert)
|
|
(TeX-argument-insert (mapconcat #'identity items ",") optional))
|
|
(setq noinsert t))))
|
|
|
|
(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)))))
|
|
|
|
(TeX-add-style-hook
|
|
"biblatex"
|
|
(lambda ()
|
|
;; Biblatex uses as default backend biber, run it unless biblatex `backend'
|
|
;; option value is one of `bibtex', `bibtex8', `bibtexu'. Autodetection of
|
|
;; the backend can be overridden by setting `LaTeX-biblatex-use-Biber' as a
|
|
;; local variable.
|
|
(setq LaTeX-using-Biber
|
|
(if (local-variable-p 'LaTeX-biblatex-use-Biber (current-buffer))
|
|
LaTeX-biblatex-use-Biber
|
|
(not (or (LaTeX-provided-package-options-member
|
|
"biblatex" "backend=bibtex")
|
|
(LaTeX-provided-package-options-member
|
|
"biblatex" "backend=bibtex8")
|
|
(LaTeX-provided-package-options-member
|
|
"biblatex" "backend=bibtexu")))))
|
|
|
|
(TeX-run-style-hooks
|
|
"keyval"
|
|
"kvoptions"
|
|
"logreq"
|
|
"ifthen"
|
|
"url")
|
|
(TeX-add-symbols
|
|
;;; Global Customization
|
|
;; Setting Package Options
|
|
'("ExecuteBibliographyOptions"
|
|
[TeX-arg-completing-read-multiple LaTeX-biblatex-entrytype
|
|
"Entry type"]
|
|
(TeX-arg-key-val LaTeX-biblatex-executebibliographyoptions-options))
|
|
;;; Bibliography Commands
|
|
;; Resources
|
|
'("addbibresource" [TeX-arg-key-val LaTeX-biblatex-addbibresource-options]
|
|
LaTeX-arg-addbibresource)
|
|
'("addglobalbib" [TeX-arg-key-val LaTeX-biblatex-addbibresource-options]
|
|
LaTeX-arg-addbibresource)
|
|
'("addsectionbib" [TeX-arg-key-val LaTeX-biblatex-addbibresource-options]
|
|
LaTeX-arg-addbibresource)
|
|
;; The Bibliography
|
|
'("printbibliography"
|
|
[TeX-arg-key-val (("env") ("heading") ("title") ("prenote") ("postnote")
|
|
("section") ("segment") ("sorting") ("type") ("nottype")
|
|
("subtype") ("notsubtype") ("keyword") ("notkeyword")
|
|
("categoy") ("notcategory") ("filter") ("check")
|
|
("prefixnumbers") ("resetnumbers" ("true" "false"))
|
|
("omitnumbers" ("true" "false")))])
|
|
'("bibbysection"
|
|
[TeX-arg-key-val (("env") ("heading") ("prenote") ("postnote"))])
|
|
'("bibbysegment"
|
|
[TeX-arg-key-val (("env") ("heading") ("prenote") ("postnote"))])
|
|
'("bibbycategory"
|
|
[TeX-arg-key-val (("env") ("prenote") ("postnote") ("section"))])
|
|
'("printbibheading"
|
|
[TeX-arg-key-val (("heading") ("title"))])
|
|
;; The List of Shorthands
|
|
'("printshorthands"
|
|
[TeX-arg-key-val (("env") ("heading") ("title") ("prenote") ("postnote")
|
|
("section") ("segment") ("sorting") ("type") ("nottype")
|
|
("subtype") ("notsubtype") ("keyword") ("notkeyword")
|
|
("categoy") ("notcategory") ("filter") ("check"))])
|
|
;; Bibliography Sections
|
|
'("newrefsection" ["Resources"])
|
|
"endrefsection"
|
|
;; Bibliography Segments
|
|
"newrefsegment"
|
|
"endrefsegment"
|
|
;; Bibliography Categories
|
|
'("DeclareBibliographyCategory" "Category")
|
|
'("addtocategory" "Category" TeX-arg-cite)
|
|
;; Bibliography Headings and Environments
|
|
'("defbibenvironment" "Name" 3)
|
|
'("defbibheading" "Name" ["Title"] t)
|
|
;; Bibliography Notes
|
|
'("defbibnote" "Name" "Text")
|
|
;; Bibliography Filters and Checks
|
|
'("defbibfilter" "Name" t)
|
|
'("defbibcheck" "Name" t)
|
|
;; Dynamic Entry Sets
|
|
'("defbibentryset" "Set"
|
|
(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)
|
|
'("Cite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("parencite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("Parencite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("footcite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("footcitetext" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
;; Style-specific Commands
|
|
'("textcite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("Textcite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("smartcite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("Smartcite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("cite*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("parencite*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("supercite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
;; Qualified Citation Lists
|
|
'("cites" LaTeX-arg-biblatex-cites)
|
|
'("Cites" LaTeX-arg-biblatex-cites)
|
|
'("parencites" LaTeX-arg-biblatex-cites)
|
|
'("Parencites" LaTeX-arg-biblatex-cites)
|
|
'("footcites" LaTeX-arg-biblatex-cites)
|
|
'("footcitetexts" LaTeX-arg-biblatex-cites)
|
|
'("smartcites" LaTeX-arg-biblatex-cites)
|
|
'("Smartcites" LaTeX-arg-biblatex-cites)
|
|
'("textcites" LaTeX-arg-biblatex-cites)
|
|
'("Textcites" LaTeX-arg-biblatex-cites)
|
|
'("supercites" LaTeX-arg-biblatex-cites)
|
|
;; Style-independent Commands
|
|
'("autocite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("Autocite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("autocite*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("Autocite*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["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)
|
|
'("Citeauthor" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citeauthor*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("Citeauthor*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citetitle" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citetitle*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citeyear" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citeyear*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citedate" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citedate*" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("citeurl" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["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)
|
|
'("footfullcite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["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)
|
|
'("Volcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("Pvolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("Pvolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("fvolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("ftolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("svolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("Svolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("tvolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("Tvolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("avolcite"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"]) ()) "Volume"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Page"]) ()) TeX-arg-cite)
|
|
'("Avolcite"
|
|
(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)
|
|
'("Notecite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("pnotecite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("Pnotecite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
'("fnotecite" (TeX-arg-conditional TeX-arg-cite-note-p
|
|
(["Prenote"] ["Postnote"]) ()) TeX-arg-cite)
|
|
;; Low-level Commands
|
|
'("citename"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"] ["Postnote"]) ())
|
|
TeX-arg-cite (TeX-arg-conditional TeX-arg-cite-note-p (["Format"]) ())
|
|
"Name list")
|
|
'("citelist"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"] ["Postnote"]) ())
|
|
TeX-arg-cite (TeX-arg-conditional TeX-arg-cite-note-p (["Format"]) ())
|
|
"Literal list")
|
|
'("citefield"
|
|
(TeX-arg-conditional TeX-arg-cite-note-p (["Prenote"] ["Postnote"]) ())
|
|
TeX-arg-cite (TeX-arg-conditional TeX-arg-cite-note-p (["Format"]) ())
|
|
"Field")
|
|
;; Miscellaneous Commands
|
|
"citereset"
|
|
"citereset*"
|
|
"mancite"
|
|
"pno"
|
|
"ppno"
|
|
"nopp"
|
|
"psq"
|
|
"psqq"
|
|
'("RN" "Integer")
|
|
'("Rn" "Integer")
|
|
;; Localization Commands
|
|
'("DefineBibliographyStrings"
|
|
(TeX-arg-completing-read LaTeX-biblatex-language-list "Language") t)
|
|
'("DefineBibliographyExtras"
|
|
(TeX-arg-completing-read LaTeX-biblatex-language-list "Language") t)
|
|
'("UndefineBibliographyExtras"
|
|
(TeX-arg-completing-read LaTeX-biblatex-language-list "Language") t)
|
|
'("DefineHyphenationExceptions"
|
|
(TeX-arg-completing-read LaTeX-biblatex-language-list "Language") 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-arg-biblatex-natbib-notes])
|
|
nil)
|
|
#'TeX-arg-cite))))
|
|
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 '(("citet" "*[[{")
|
|
("Citet" "*[[{")
|
|
("citep" "*[[{")
|
|
("Citep" "*[[{")
|
|
("citealt" "*[[{")
|
|
("Citealt" "*[[{")
|
|
("citealp" "*[[{")
|
|
("Citealp" "*[[{"))
|
|
'biblatex))))
|
|
|
|
(LaTeX-add-environments
|
|
;;; Bibliography commands
|
|
;; Bibliography Sections
|
|
'("refsection" ["Resources"])
|
|
;; Bibliography Segments
|
|
"refsegment")
|
|
|
|
;; Declaring expert macros and environments. Criterion: all macros and
|
|
;; environments to fine tune the bibliography, probably they will be used
|
|
;; only by expert users.
|
|
(TeX-declare-expert-macros
|
|
"biblatex"
|
|
"ExecuteBibliographyOptions" "printshorthands" "newrefsection"
|
|
"endrefsection" "newrefsegment" "endrefsegment"
|
|
"DeclareBibliographyCategory" "addtocategory" "defbibenvironment"
|
|
"defbibheading" "defbibnote" "defbibfilter" "defbibcheck" "defbibentryset"
|
|
"citereset" "citereset*" "mancite" "pno" "ppno" "nopp" "psq" "psqq" "RN"
|
|
"Rn" "DefineBibliographyStrings" "DefineBibliographyExtras"
|
|
"UndefineBibliographyExtras" "DefineHyphenationExceptions"
|
|
"NewBibliographyString")
|
|
(LaTeX-declare-expert-environments
|
|
"biblatex"
|
|
"refsection" "refsegment")
|
|
|
|
;; Tell RefTeX: If package option `natbib' is given, activate that
|
|
;; format, otherwise stick with `biblatex':
|
|
(when (and LaTeX-reftex-cite-format-auto-activate
|
|
(fboundp 'reftex-set-cite-format))
|
|
(if (or (LaTeX-provided-package-options-member "biblatex" "natbib")
|
|
(LaTeX-provided-package-options-member "biblatex" "natbib=true"))
|
|
(reftex-set-cite-format 'natbib)
|
|
;; The entry `biblatex' is defined in
|
|
;; `reftex-cite-format-builtin' in reftex-vars.el which will be
|
|
;; part of Emacs >= 25.3. So check here if we find an entry,
|
|
;; otherwise do it manually for older Emacsen.
|
|
(if (assoc 'biblatex reftex-cite-format-builtin)
|
|
(reftex-set-cite-format 'biblatex)
|
|
(reftex-set-cite-format
|
|
'((?\C-m . "\\cite[][]{%l}")
|
|
(?C . "\\cite*[][]{%l}")
|
|
(?t . "\\textcite[][]{%l}")
|
|
(?T . "\\textcite*[][]{%l}")
|
|
(?p . "\\parencite[][]{%l}")
|
|
(?P . "\\parencite*[][]{%l}")
|
|
(?f . "\\footcite[][]{%l}")
|
|
(?s . "\\smartcite[][]{%l}")
|
|
(?u . "\\autocite[][]{%l}")
|
|
(?U . "\\autocite*[][]{%l}")
|
|
(?a . "\\citeauthor{%l}")
|
|
(?A . "\\citeauthor*{%l}")
|
|
(?i . "\\citetitle{%l}")
|
|
(?I . "\\citetitle*{%l}")
|
|
(?y . "\\citeyear{%l}")
|
|
(?Y . "\\citeyear*{%l}")
|
|
(?n . "\\nocite{%l}")))))))
|
|
TeX-dialect)
|
|
|
|
(defvar LaTeX-biblatex-package-options-list
|
|
(append
|
|
;;; Preamble Options
|
|
LaTeX-biblatex-executebibliographyoptions-options
|
|
'(;;; Load-time Options
|
|
("backend" ("biber" "bibtex" "bibtexu" "bibtex8"))
|
|
("style" BibLaTeX-global-style-files)
|
|
("bibstyle" BibLaTeX-global-style-files)
|
|
("citestyle" BibLaTeX-global-style-files)
|
|
("natbib" ("true" "false"))
|
|
("mcite" ("true" "false"))
|
|
;;; Entry Options
|
|
;; Preamble/Type/Entry Options
|
|
("useauthor" ("true" "false"))
|
|
("useeditor" ("true" "false"))
|
|
("usetranslator" ("true" "false"))
|
|
("useprefix" ("true" "false"))
|
|
("indexing" ("true" "false" "cite" "bib"))
|
|
;; Type/Entry Options are not available globally.
|
|
;; Legacy Options (deprecated)
|
|
("openbib")))
|
|
"Package options for the biblatex package.")
|
|
|
|
(defun LaTeX-biblatex-package-options nil
|
|
"Prompt for package options for the biblatex package."
|
|
(unless BibLaTeX-global-style-files
|
|
(if (if (eq TeX-arg-input-file-search 'ask)
|
|
(not (y-or-n-p "Find BibLaTeX style yourself? "))
|
|
TeX-arg-input-file-search)
|
|
;; ...then, search for BibLaTeX styles.
|
|
(progn
|
|
(message "Searching for BibLaTeX styles...")
|
|
(setq BibLaTeX-global-style-files
|
|
(TeX-search-files-by-type 'bbxinputs 'global t t))
|
|
(message "Searching for BibLaTeX styles...done"))
|
|
;; ...else, use for completion only standard BibLaTeX styles (see §3.3 of
|
|
;; Biblatex reference manual).
|
|
(setq BibLaTeX-global-style-files
|
|
'("numeric" "numeric-comp" "numeric-verb" "alphabetic"
|
|
"alphabetic-verb" "authoryear" "authoryear-comp" "authoryear-ibid"
|
|
"authoryear-icomp" "authortitle" "authortitle-comp"
|
|
"authortitle-ibid" "authortitle-icomp" "authortitle-terse"
|
|
"authortitle-tcomp" "authortitle-ticomp" "verbose" "verbose-ibid"
|
|
"verbose-note" "verbose-inote" "verbose-trad1" "verbose-trad2"
|
|
"verbose-trad3" "reading" "draft" "debug"))))
|
|
(TeX-read-key-val t LaTeX-biblatex-package-options-list))
|
|
|
|
;;; biblatex.el ends here
|