---- title: AUTHOR module – handling BibTeX authors SPDX-FileCopyrightText: 2024 Norman Gray 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).