----
title: AUTHOR module – handling BibTeX authors
SPDX-FileCopyrightText: 2024 Norman Gray <https://nxg.me.uk>
SPDX-License-Identifier: BSD-2-Clause


In BibTeX terms, an author string is the content of an `author` or
`editor` field (or potentially other fields such as `translator` of
course).  That field consists of a sequence of names separated by the
string `and`, where each name has one of the following structures:

  * First Last (where `First` is a sequence of names).
  * First von Last (where `von` is a particle such as `de`, or `von
    der`, etc).
  * [von] Last, First (the `von` part is optional here).
  * [von] Last, First, Jr (where `Jr` is a sequence of similar
    post-nominal clarifications).
  * Last (a sole name is parsed as a ‘last name’, below).

Curly brackets override the parsing, so that `{Barnes and Noble, Inc}`
and `Andreas {Thurn and Taxis}` are both single names, in the first
case consisting of only a single ‘last’ name.

Beastie will parse such specifications, and make them available for
processing.  For fuller details, see standard BibTeX documentation, or
consult the `btxdoc.pdf` file which is part of the [BibTeX package on
CTAN](https://ctan.org/pkg/bibtex).
Note that Beastie detects the `and` separator _case-sensitively_, as
opposed to the BibTeX behaviour of matching it case-insensitively
(which is bound to trip over someone surnamed ‘And’).

The name-formatting differs from BibTeX's in a couple of subtleties
related to non-default inter-token separators when formatting peoples’
initials.  There are some ambiguities in the BibTeX documentation
which Beastie resolves in what seems like a sensible way, without
necessarily deferring to ‘what bibtex-the-program does’ as a source
of authority.

The [`parse-author-list`](#fn-parse-author-list) function will take
such an `and`-separated string, and produce a list of
[`author?`](#fn-author?) objects.  You can pull apart the elements of
this object with
[`author-first`](#fn-author-first),
[`author-last`](#fn-author-last),
[`author-von`](#fn-author-von),
[`author-junior`](#fn-author-junior),
or format it to a string using
[`format-name`](#fn-format-name).
