Formulas

Note: a number of functions below talk about the author’s lastname; you can read that as “when available”. If you have the name as a single-field name (for entities like International Business Machines or Aristoteles), Zotero doesn’t have a last name, and the full single-field name is taken instead.

Functions

auth(n: number = 0, m: number = 1, creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false)

The first n (default: all) characters of the mth (default: first) author's last name.

parametertypedefault
nnumber0the number of characters to take from the name, 0 = all
mnumber1select the mth author
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials

authAuthEa(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = '.')

The last name of the first two authors, and ".ea" if there are more than two.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring'.'use this character between authors

authEtAl(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = ' ')

The last name of the first author, and the last name of the second author if there are two authors or "EtAl" if there are more than two. This is similar to auth.etal. The difference is that the authors are not separated by "." and in case of more than 2 authors "EtAl" instead of ".etal" is appended.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring' 'use this character between authors

authEtal2(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = '.')

The last name of the first author, and the last name of the second author if there are two authors or ".etal" if there are more than two.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring'.'use this character between authors

authForeIni(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*')

The given-name initial of the first author.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.

authIni(n: number = 0, creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = '.')

The beginning of each author's last name, using no more than n characters (0 = all).

parametertypedefault
nnumber0the number of characters to take from the name, 0 = all
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring'.'use this character between authors

authorIni(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = '.')

The first 5 characters of the first author's last name, and the last name initials of the remaining authors.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring'.'use this character between authors

authorLast(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false)

The last name of the last author

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials

authorLastForeIni(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*')

The given-name initial of the last author.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.

authorsAlpha(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = ' ')

Corresponds to the BibTeX style "alpha". One author: First three letters of the last name. Two to four authors: First letters of last names concatenated. More than four authors: First letters of last names of first three authors concatenated. "+" at the end.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring' 'use this character between authors

authorsn(n: number = 0, creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = ' ')

The last names of the first n (default: all) authors.

parametertypedefault
nnumber0the number of characters to take from the name, 0 = all
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring' 'use this character between authors

authshort(creator: ('author' | 'editor' | 'translator' | 'collaborator' | '*') = '*', initials: boolean = false, sep: string = '.')

The last name if one author/editor is given; the first character of up to three authors' last names if more than one author is given. A plus character is added, if there are more than three authors.

parametertypedefault
creator('author' | 'editor' | 'translator' | 'collaborator' | '*')'*'kind of creator to select, * selects author first, and if not present, editor, translator or collaborator, in that order.
initialsbooleanfalseadd author initials
sepstring'.'use this character between authors

creatornames(template?: `sprintf-style format template`, transliterate?: boolean)

Sets the sprintf-template default for representing creator names. Default is '%(f)s'.

in the creator template, you can use:

  • %(f)s: family ("last") name
  • %(f_zh)s: family ("last") name extracted from chinese compound names. Need jieba to be enabled
  • %(g)s: given ("first") name
  • %(g_zh)s: given ("first") name extracted from chinese compound names. Need jieba to be enabled
  • %(i)s: given-name initials
  • %(I)s: given-name initials, upper-case

parametertypedefault
templatesprintf-style format templatetemplate string
transliteratebooleantransliterate the returned name

creators(n: (number | [ number, number ]) = 0, type: ('*' | Creator | Creator[] | (Creator | '*')[][]) = [['primary', 'editor', 'translator', '*']], name: ('' | `sprintf-style format template`) = '', etal: string = '', sep: string = ' ', min: number = 0, max: number = 0)

Author/editor information.

creator type can be one of artist, attorneyAgent, author, bookAuthor, cartographer, castMember, commenter, composer, contributor, cosponsor, counsel, director, editor, guest, interviewee, interviewer, inventor, performer, podcaster, presenter, producer, programmer, recipient, reviewedAuthor, scriptwriter, seriesEditor, sponsor, translator, wordsBy

in the creator template, you can use:

  • %(f)s: family ("last") name
  • %(f_zh)s: family ("last") name extracted from chinese compound names. Need jieba to be enabled
  • %(g)s: given ("first") name
  • %(g_zh)s: given ("first") name extracted from chinese compound names. Need jieba to be enabled
  • %(i)s: given-name initials
  • %(I)s: given-name initials, upper-case

parametertypedefault
n(number | [ number, number ])0select the first n creators (when passing a number) or the authors in this range (inclusive, when passing two values); negative numbers mean "from the end", default = 0 = all
type('' | Creator | Creator[] | (Creator | '')[][])[['primary', 'editor', 'translator', '*']]select only creators of given type(s). Default: all
name('' | sprintf-style format template)''sprintf-js template. Available named parameters are: f (family name), g (given name), i (initials)
etalstring''use this term to replace authors after n authors have been named
sepstring' 'use this character between authors
minnumber0skip to the next pattern if there are less than min creators, 0 = ignore
maxnumber0skip to the next pattern if there are more than max creators, 0 = ignore

creatortypes(match?: RegExp)

This will return a comma-separated list of creator type information for all creators on the item in the form <1 or 2><creator-type>, where 1 or 2 denotes a 1-part or 2-part creator, and creator-type is one of {{% citekey-formatters/creatortypes %}}, or primary for the primary creator-type of the Zotero item under consideration. The list is prefixed by the item type, so might look like audioRecording:2performer,2performer,1composer.

parametertypedefault
matchRegExpRegex to test the creator-type list. When passed, and the creator-type list does not match the regex, jump to the next formule. When it matches, return nothing but stay in the current formule. When no regex is passed, output the creator-type list for the item (mainly useful for debugging).

date(format: string = '%Y-%m-%d')

The date of the publication

parametertypedefault
formatstring'%Y-%m-%d'sprintf-style format template

extra(variable: string)

A pseudo-field from the extra field. eg if you have Original date: 1970 in your extra field, you can get it as extra(originalDate), or tex.shortauthor: APA which you could get with extra('tex.shortauthor'). Any tex. field will be picked up, the other fields can be selected from this list of key names.

parametertypedefault
variablestringextra-field line identifier

firstpage

The number of the first page of the publication (Caution: this will return the lowest number found in the pages field, since BibTeX allows 7,41,73--97 or 43+.)

group(name: string)

Tests whether the item is in the given group library

parametertypedefault
namestringgroup name

infix(format: `sprintf-style format template` = '%(a)s', start: (string | number) = 0)

a pseudo-function that sets the citekey disambiguation infix using an sprintf-js format spec for when a key is generated that already exists. The infix charachter appears at the place of this function of the formula instead of at the and (as postfix does). You must include exactly one of the placeholders %(n)s (number), %(a)s (alpha, lowercase) or %(A)s (alpha, uppercase). For the rest of the disambiguator you can use things like padding and extra text as sprintf-js allows. With start set to 1 the disambiguator is always included, even if there is no need for it when no duplicates exist. The default format is %(a)s.

in the template, you can use:

  • %(a)s: lower-case alphabetic disambiguator
  • %(A)s: upper-case alphabetic disambiguator
  • %(n)s: numeric disambiguator

parametertypedefault
formatsprintf-style format template'%(a)s'sprintf-style format template
start(string | number)0start value for postfix

inspireHep

Fetches the key from inspire-hep based on DOI or arXiv ID

item(id: ('key' | 'id') = 'key')

returns the internal item ID/key

parametertypedefault
id('key' | 'id')'key''id': return itemID; 'key': return the item key

journal(abbrev: ('off' | 'abbrev' | 'auto' | 'abbrev+auto' | 'full') = 'abbrev+auto')

returns the journal abbreviation, or, if not found, the journal title, If 'automatic journal abbreviation' is enabled in the BBT settings, it will use the same abbreviation filter Zotero uses in the wordprocessor integration. You might want to use the abbr filter on this. Abbreviation behavior can be specified as abbrev+auto (the default) which uses the explicit journal abbreviation if present, and tries the automatic abbreviator if not (if auto-abbrev is enabled in the preferences), auto (skip explicit journal abbreviation even if present), abbrev (no auto-abbrev even if it is enabled in the preferences) or full/off (no abbrevation).

parametertypedefault
abbrev('off' | 'abbrev' | 'auto' | 'abbrev+auto' | 'full')'abbrev+auto'abbreviation mode

keyword(n: number)

Tag number n. Mostly for legacy compatibility

parametertypedefault
nnumberposition of tag to get

language(...name: string[])

Tests whether the item has the given language set, and skips to the next pattern if not

language can be one of ame, american, american english, americanenglish, ar, ar-ar, ar-dz, ar-eg, ar-iq, ar-jo, ar-lb, ar-ma, ar-ps, ar-sa, ar-sy, ar-tn, ara, arabic, arabic-algeria, arabic-dz, arabic-eg, arabic-egypt, arabic-iq, arabic-iraq, arabic-jo, arabic-jordan, arabic-lb, arabic-lebanon, arabic-ma, arabic-morocco, arabic-palestinianterritories, arabic-ps, arabic-sa, arabic-saudiarabia, arabic-sy, arabic-syria, arabic-tn, arabic-tunisia, australian, australian english, australianenglish, austrian, austrian german, austrian-traditional, austriangerman, austriangerman-traditional, bri, british, british english, britishenglish, canadian, canadian english, canadianenglish, chinese, chinese-hans, chinese-hans-hk, chinese-hans-mo, chinese-hans-sg, chinese-hant, chinese-hant-hk, chinese-hant-mo, chinese-simplified, chinese-simplified-hongkongsarchina, chinese-simplified-macausarchina, chinese-simplified-singapore, chinese-traditional, chinese-traditional-hongkongsarchina, chinese-traditional-macausarchina, de, de-1901, de-1996, de-at, de-at-1901, de-at-1996, de-ch, de-ch-1901, de-ch-1996, de-de, deutsch, en, en-au, en-ca, en-en, en-gb, en-nz, en-us, eng, english, english-au, english-australia, english-ca, english-canada, english-gb, english-newzealand, english-nz, english-unitedkingdom, english-unitedstates, english-us, ger, german, german-at, german-at-traditional, german-austria, german-austria-traditional, german-ch, german-ch-traditional, german-switzerland, german-switzerland-traditional, german-traditional, ja, ja-ja, jap, japanese, nau, naustrian, newzealand, nge, ngerman, nsw, nswissgerman, schweizer hochdeutsch, simplified chinese, swiss high german, swisshighgerman, swisshighgerman-traditional, traditional chinese, tw, ukenglish, usenglish, zh, zh-hans, zh-hans-hk, zh-hans-mo, zh-hans-sg, zh-hant, zh-hant-hk, zh-hant-mo, zh-tw, zh-zh, österreichisches deutsch, العربية, 中文, 中文-中文, 日本語, 简体中文, 繁體中文

parametertypedefault
namestring[]one or more language codes

lastpage

The number of the last page of the publication (See the remark on firstpage)

library

Tests whether the item is in the user library

month

the month of the publication

origdate

the original date of the publication

origyear

the original year of the publication

postfix(format: `sprintf-style format template` = '%(a)s', start: (string | number) = 0)

a pseudo-function that sets the citekey disambiguation postfix using an sprintf-js format spec for when a key is generated that already exists. Does not add any text to the citekey otherwise. You must include exactly one of the placeholders %(n)s (number), %(a)s (alpha, lowercase) or %(A)s (alpha, uppercase). For the rest of the disambiguator you can use things like padding and extra text as sprintf-js allows. With start set to 1 the disambiguator is always included, even if there is no need for it when no duplicates exist. The default format is %(a)s.

in the template, you can use:

  • %(a)s: lower-case alphabetic disambiguator
  • %(A)s: upper-case alphabetic disambiguator
  • %(n)s: numeric disambiguator

parametertypedefault
formatsprintf-style format template'%(a)s'sprintf-style format template
start(string | number)0start value for postfix

shorttitle(n: number = 3, m: number = 0)

The first n (default: 3) words of the title, apply capitalization to first m (default: 0) of those.

parametertypedefault
nnumber3number of words to select
mnumber0number of words to capitalize. 0 means no words will be capitalized. Mind that existing capitals are not removed. If you enable capitalization, you also get transliteration; for CJK, capitalization is not meaningful, so if you want capitalization, BBT romanizes first.

shortyear

The last 2 digits of the publication year

title

Capitalize all the significant words of the title, and concatenate them. For example, An awesome paper on JabRef will become AnAwesomePaperJabref

transliterate(mode: (('minimal' | 'german' | 'japanese' | 'chinese' | 'arabic' | 'ukranian' | 'mongolian' | 'russian') | 'de' | 'ja' | 'chinese-traditional' | 'zh-hant' | 'zh' | 'tw' | 'ar' | 'uk' | 'mn' | 'ru'))

Set the default transliteration mode. If you don't specify a mode, the mode for an entry is derived from the item language field

parametertypedefault
mode(('minimal' | 'german' | 'japanese' | 'chinese' | 'arabic' | 'ukranian' | 'mongolian' | 'russian') | 'de' | 'ja' | 'chinese-traditional' | 'zh-hant' | 'zh' | 'tw' | 'ar' | 'uk' | 'mn' | 'ru')specialized translateration modes for german, japanese or chinese.

type(...allowed: string[])

Without arguments, returns the item type. When arguments as passed, tests whether the item is of any of the given types, and skips to the next pattern if not, eg type(book) + veryshorttitle | auth + year.

creator type can be one of annotation, artwork, attachment, audioRecording, bill, blogPost, book, bookSection, case, computerProgram, conferencePaper, dataset, dictionaryEntry, document, email, encyclopediaArticle, film, forumPost, hearing, instantMessage, interview, journalArticle, letter, magazineArticle, manuscript, map, newspaperArticle, note, patent, podcast, preprint, presentation, radioBroadcast, report, standard, statute, thesis, tvBroadcast, videoRecording, webpage

parametertypedefault
allowedstring[]one or more item type names

veryshorttitle(n: number = 1, m: number = 0)

The first n words of the title, apply capitalization to first m of those

parametertypedefault
nnumber1number of words to select
mnumber0number of words to capitalize. 0 means no words will be capitalized. Mind that existing capitals are not removed.

year

The year of the publication

zotero

Generates citation keys as the stock Zotero Bib(La)TeX export does. Note that this pattern inherits all the problems of the original Zotero citekey generation -- you should really only use this if you have existing papers that rely on this behavior.

Note: All auth... functions will fall back to editors if no authors are present on the item.

Note: The functions above used to have the clean function automatically applied to them, this is no longer the case, so if you have CJK authors/titles and you want to manipulate them (using eg. capitalize), you could have to use transliterate on them first, eg. authEtal2.transliterate.capitalize + year + shorttitle(3, 3).

Direct access to unprocessed fields (“Field functions”)

The above functions all retrieve information stored in the item’s fields and process it in some way. If you don’t want this, you can instead call field contents without any processing. To access Zotero fields, refer to them as given in the table below:

AbstractNote AccessDate AdminFlagJM AdoptionDateJM
AlbumJM ApplicationNumber Archive ArchiveCollectionJM
ArchiveIDZ ArchiveLocation ArtworkMedium ArtworkSize
AssemblyNumberJM Assignee AudioFileType AudioRecordingFormat
AuthorityZ BillNumber BlogTitle BookAbbreviationJM
BookTitle CallNumber CaseName Code
CodeNumber CodePages CodeVolume Committee
Company ConferenceDateJM ConferenceName Country
Court DOI Date DateAmendedJM
DateDecided DateEnacted DictionaryTitle Distributor
DivisionJM DocketNumber DocumentNameJM DocumentNumber
Edition EncyclopediaTitle EpisodeNumber FilingDate
FirstPage FormatZ ForumTitle GazetteFlagJM
Genre History ISBN ISSN
IdentifierZ Institution InterviewMedium Issue
IssueDate IssuingAuthority JournalAbbreviation JurisdictionJM
Label Language LegalStatus LegislativeBody
LetterType LibraryCatalog ManuscriptType MapType
Medium MeetingName MeetingNumberJM NameOfAct
Network NewsCaseDateJM NumPages Number
NumberOfVolumes OpeningDateJM OpusJM OrganizationZ
OriginalDateJM Pages ParentTreatyJM PatentNumber
Place PostType PresentationType PriorityDateJM
PriorityNumbers ProceedingsTitle ProgramTitle ProgrammingLanguage
PublicLawNumber PublicationDateJM PublicationNumberJM PublicationTitle
Publisher References RegnalYearJM RegulationTypeJM
RegulatoryBodyJM ReignJM ReleaseJM ReportNumber
ReportType Reporter ReporterVolume RepositoryZ
RepositoryLocationZ ResolutionLabelJM Rights RunningTime
Scale Section Series SeriesNumber
SeriesText SeriesTitle Session SessionTypeJM
ShortTitle SigningDateJM Status Studio
Subject SupplementNameJM System ThesisType
Title TreatyNumberJM Type University
Url VersionNumber VideoRecordingFormat Volume
VolumeTitleJM WebsiteTitle WebsiteType YearAsVolumeJM

(fields marked Z are only available in Zotero, fields marked with JM are only available in Juris-M).

Filters

abbr(chars: number = 1)

Abbreviates the text. Only the first character and subsequent characters following white space will be included.

parametertypedefault
charsnumber1number of characters to return per word

acronym(list: string = 'acronyms', reload: boolean = false, passthrough: boolean = false)

Does an acronym lookup for the text.

parametertypedefault
liststring'acronyms'lookup list. The list must be a CSV file and live in the Zotero/better-bibtex directory in your Zotero profile, and must use commas as the delimiter.
reloadbooleanfalsereload the list for every call. When off, the list will only be read at startup of Better BibTeX. You can set this to true temporarily to live-reload a list.
passthroughbooleanfalseif no match is found, pass through input.

alphanum

clears out everything but unicode alphanumeric characters (unicode character classes L and N)

ascii

removes all non-ascii characters

capitalize

uppercases the first letter of each word

clean

transliterates the citation key and removes unsafe characters

condense(sep: string = '')

replaces spaces in the value passed in. You can specify what to replace it with by adding it as a parameter, e.g .condense('_') will replace spaces with underscores. Equivalent to .replace(/\s+/g, sep).

parametertypedefault
sepstring''replacement character

default(text: string)

Returns the given text if no output was generated

parametertypedefault
textstringliteral text to return

discard

discards the input

find(match: (string | RegExp), passthrough: boolean = false)

Finds a text in the string and returns it.

parametertypedefault
match(string | RegExp)regex or string to match. String matches are case-insensitive
passthroughbooleanfalseif no match is found, pass through input.

formatDate(format: string = '%Y-%m-%d')

formats date as by replacing y, m and d in the format

parametertypedefault
formatstring'%Y-%m-%d'sprintf-style format template

ideographs

Treat ideaographs as individual words

jieba(mode?: string)

word segmentation for Chinese items. Uses substantial memory, and adds about 7 seconds to BBTs startup time; must be enabled under Preferences -> Better BibTeX -> Advanced -> Citekeys

parametertypedefault
modestringfor backwards compatibility, this param will be accepted, but it is a no-op since the switch to jieba-rs. It will be removed eventually.

kuromoji

word segmentation for Japanese items. Uses substantial memory; must be enabled under Preferences -> Better BibTeX -> Advanced -> Citekeys

len(relation: ('<' | '>' | '<=' | '==' | '!=' | '>=') = '>', length: number = 0)

If the length of the output does not match the given number, skip to the next pattern.

parametertypedefault
relation('<' | '>' | '<=' | '==' | '!=' | '>=')'>'comparison operator
lengthnumber0value to compare length with

localTime

transforms date/time to local time. Mainly useful for dateAdded and dateModified as it requires an ISO-formatted input.

lower

Forces the text inserted by the field marker to be in lowercase. For example, auth.lower expands to the last name of the first author in lowercase.

match(match: (string | RegExp), clean: boolean = false)

If the output does not match the given string/regex, skip to the next pattern.

parametertypedefault
match(string | RegExp)regex or string to match. String matches are case-insensitive
cleanbooleanfalsetransliterates the current output and removes unsafe characters during matching

nopunct(dash: string = '-')

Removes punctuation

parametertypedefault
dashstring'-'replace dashes with given character

nopunctordash

Removes punctuation and word-connecting dashes. alias for nopunct(dash='')

numeric

returns the value if it's an integer

pinyin

transliterates the citation key to pinyin

postfix(postfix: string)

postfixes with its parameter, so postfix('_') will add an underscore to the end if, and only if, the value it is supposed to postfix isn't empty

parametertypedefault
postfixstringpostfix string

prefix(prefix: string)

prefixes with its parameter, so .prefix('_') will add an underscore to the front if, and only if, the value it is supposed to prefix isn't empty.

parametertypedefault
prefixstringprefix string

replace(find: (string | RegExp), replace: string)

replaces text, for the text to match you can pass either:

  • a string: .replace('.etal','&etal') which will match case-insensitive, so will replace .EtAl with &etal.
  • javascript regular expression: .replace(/[.]etal/ig, '&etal')

parametertypedefault
find(string | RegExp)string or regex to match. String matches are case-insensitive
replacestringliteral text to replace the match with

select(start: number = 1, n?: number)

selects words from the value passed in. The format is select(start,number) (1-based), so select(1,4) or select(n=4) would select the first four words. If n is not given, all words from start to the end are selected.

parametertypedefault
startnumber1first word to select (1-based)
nnumbernumber of words to select. Default is all.

skipwords(nopunct: boolean = false)

filters out common words like 'of', 'the', … the list of words can be seen and changed by going into about:config under the key extensions.zotero.translators.better-bibtex.skipWords as a comma-separated, case-insensitive list of words.

If you want to strip words like 'Jr.' from names, you could use something like Auth.nopunct.skipwords.fold after adding jr to the skipWords list. Note that this filter is always applied with nopunct on if you use title (which is different from Title) or shorttitle.

parametertypedefault
nopunctbooleanfalseremove punctuation from words

substring(start: number = 1, n?: number)

substring(start,n) selects n (default: all) characters starting at start

parametertypedefault
startnumber1starting character (1-based)
nnumbernumber of characters to select (default: remainder from start)

transliterate(mode?: (('minimal' | 'german' | 'japanese' | 'chinese' | 'arabic' | 'ukranian' | 'mongolian' | 'russian') | 'de' | 'ja' | 'chinese-traditional' | 'zh-hant' | 'zh' | 'tw' | 'ar' | 'uk' | 'mn' | 'ru'))

transliterates the citation key. If you don't specify a mode, the mode is derived from the item language field

parametertypedefault
mode(('minimal' | 'german' | 'japanese' | 'chinese' | 'arabic' | 'ukranian' | 'mongolian' | 'russian') | 'de' | 'ja' | 'chinese-traditional' | 'zh-hant' | 'zh' | 'tw' | 'ar' | 'uk' | 'mn' | 'ru')specialized translateration modes for german, japanese or chinese.

upper

Forces the text inserted by the field marker to be in uppercase. For example, auth.upper expands the last name of the first author in uppercase.

Usage note: the functions condense, skipwords, capitalize and select rely on whitespaces for word handling. Most functions strip whitespace and thereby make these filter functions sort of useless. You will in general want to use the fields from the table above, which give you the values from Zotero without any changes. The fields with ** are only available in Juris-M.