texlive[59067] Master/texmf-dist: windycity (3may21)

commits+karl at tug.org commits+karl at tug.org
Mon May 3 23:12:04 CEST 2021


Revision: 59067
          http://tug.org/svn/texlive?view=revision&revision=59067
Author:   karl
Date:     2021-05-03 23:12:04 +0200 (Mon, 03 May 2021)
Log Message:
-----------
windycity (3may21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/windycity/CHANGES.md
    trunk/Master/texmf-dist/doc/latex/windycity/windycity.bib
    trunk/Master/texmf-dist/doc/latex/windycity/windycity.pdf
    trunk/Master/texmf-dist/doc/latex/windycity/windycity.tex
    trunk/Master/texmf-dist/tex/latex/windycity/american-windycity.lbx
    trunk/Master/texmf-dist/tex/latex/windycity/windycity.bbx
    trunk/Master/texmf-dist/tex/latex/windycity/windycity.cbx
    trunk/Master/texmf-dist/tex/latex/windycity/windycity.dbx
    trunk/Master/texmf-dist/tex/latex/windycity/windycity.sty

Modified: trunk/Master/texmf-dist/doc/latex/windycity/CHANGES.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/windycity/CHANGES.md	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/doc/latex/windycity/CHANGES.md	2021-05-03 21:12:04 UTC (rev 59067)
@@ -8,6 +8,66 @@
 GitHub](https://github.com/brianchase/windycity "GitHub:
 brianchase/windycity").
 
+## 2021-05-02
+
+This release brings a long overdue redesign of the workflow for
+editors and translators. My hope is that users won't need to change
+their bibliography databases, but I did need to change one example in
+the user guide, moving an editor name list from a child entry to its
+parent, where it belonged in the first place. In all, the changes
+greatly extend the control and flexibility that users have over the
+placement of editors and translators while allowing for simpler
+internals.
+
+* highlights pertaining to editors and translators:
+
+  - added support for the following editorial roles:
+
+    + expanded by...
+    + expanded and compiled by...
+    + expanded and edited by...
+    + expanded and revised by...
+    + expanded and translated by...
+    + expanded and updated by...
+    + compiled and expanded by...
+    + edited and expanded by...
+    + revised and expanded by...
+    + translated and expanded by...
+    + updated and expanded by...
+
+  - added support for translators of `issuetitle` and `series`, which
+    means you may assign translators to every title to which you may
+    assign editors
+  - editor and translator type fields now accept comma-separated
+    bibliography strings, making all editorial roles available for
+    `issuetitle`, `maintitle`, and `series` (e.g. if `editor` is the
+    reviser of `maintitle`, put `maintitle,reviser` or
+    `reviser,maintitle` in `editortype`)
+  - added `swaptrans:issuetitle`, `swaptrans:maintitle`, and
+    `swaptrans:series` entry options to swap positions of editors and
+    translators of `issuetitle`, `maintitle`, and `series`
+  - for special circumstances (explained in the user guide), added
+    three more entry options for swapping editors and translators:
+    `swaptrans:title`, `swaptrans:booktitle`, and
+    `swaptrans:bookbooktitle`
+  - added support for printing a second tier of editors after `title`,
+    `issuetitle`, `maintitle`, and `series` (e.g. "Edited by Jane Doe.
+    Revised and Expanded by John Smith")
+  - if the editors and translators of a work are the same, you can
+    control the assignment in several ways, including with just one
+    name list and its corresponding type field (e.g. if Jane Doe is
+    the compiler and translator of `title`, you can, among other
+    options, put `Doe, Jane` in `editor` and `comptrans` in
+    `editortype` or `Doe, Jane` in `translator` and `comptrans` in
+    `translatortype`)
+  - fixed several issues, at least, affecting the placement of
+    editors and translators, mainly the latter
+
+* added preamble option `shortafter` to print the same output as the
+  preamble option `short` but with long first citations
+* for works in certain collections, fixed punctuation after the
+  `edition` field
+
 ## 2021-01-30
 
 * added support for the `pubstate` field to indicate when a work is

Modified: trunk/Master/texmf-dist/doc/latex/windycity/windycity.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/windycity/windycity.bib	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/doc/latex/windycity/windycity.bib	2021-05-03 21:12:04 UTC (rev 59067)
@@ -53,6 +53,46 @@
   publisher = ucp,
   year = {2002}
 }
+ at InCollection{doe2017a,
+  options = {swaptrans:title},
+  title = {An Essay},
+  editor = {Smith, John},
+  translator = {Smith, John},
+  pages = {18–35},
+  crossref = {jones2017}
+}
+ at InCollection{doe2017b,
+  options = {swaptrans:booktitle},
+  title = {An Essay},
+  editor = {Smith, John},
+  translator = {Smith, John},
+  pages = {18–35},
+  crossref = {jones2017}
+}
+ at InCollection{doe2017c,
+  options = {swaptrans:bookbooktitle},
+  title = {An Essay},
+  editor = {Smith, John},
+  translator = {Smith, John},
+  pages = {18–35},
+  crossref = {jones2017}
+}
+ at InBook{jones2017,
+  title = {A Volume of Essays},
+  editor = {Smith, John},
+  translator = {Smith, John},
+  volume = {1},
+  crossref = {white2017}
+}
+ at Collection{white2017,
+  title = {A Collection of Essays},
+  editor = {Smith, John},
+  translator = {Smith, John},
+  volumes = {3},
+  address = {Chicago},
+  publisher = {University of Chicago Press},
+  year = {2017}
+}
 @InCollection{thoreau2007.7,
   title = {Walking},
   pages = {185–222},
@@ -81,22 +121,24 @@
   publisher = ucp,
   year = {1948}
 }
- at InBook{spinoza1900.1.1,
-  title = {A Theological-Political Treatise},
-  crossref = {spinoza1900.1}
+ at InCollection{myers2012,
+  author = {Myers, Herbert},
+  title = {Pitch and Transposition},
+  pages = {375--393},
+  crossref = {carter2012}
 }
- at Collection{spinoza1900.1,
-  author = {Spinoza, Benedict de},
-  title = {The Chief Works of Benedict de Spinoza},
-%  edition = {rev. ed.},% alternative to below:
-  edition = {revised},
-  translator = {Elwes, R. H. M.},
-  volume = {1},
-  address = {London},
-  publisher = {George Bell {and} Sons},
-  year = {1900}
+ at Collection{carter2012,
+  title = {A Performer's Guide to Seventeenth-Century Music},
+  edition = {2},
+  editor = {Carter, Stewart},
+  editora = {Kite-Powell, Jeffery},
+  editoratype = {revex},
+  address = {Bloomington},
+  publisher = {Indiana University Press},
+  year = {2012}
 }
 @InCollection{doe2018,
+  keywords = {notinbib,notinref},
   author = {Doe, Jane},
   title = {A Poem},
   translator = {Smith, John},
@@ -103,20 +145,16 @@
   pages = {56–57},
   crossref = {jones2018}
 }
- at InCollection{edwards2018,
-  author = {Adams, Mary},
-  title = {Another Poem},
-  pages = {128–32},
-  crossref = {jones2018}
-}
 @InBook{jones2018,
+  keywords = {notinbib,notinref},
   editor = {Jones, David},
   title = {A Volume of Poems},
   volume = {2},
   year = {2018},
-  crossref = {blow2016}
+  crossref = {white2016}
 }
- at Collection{blow2016,
+ at Collection{white2016,
+  keywords = {notinbib,notinref},
   editor = {White, Amy},
   title = {A Collection of Poems},
   volumes = {4},
@@ -124,6 +162,47 @@
   publisher = ucp,
   year = {2016–18}
 }
+ at InCollection{doe2018.alt,
+  keywords = {notinbib,notinref},
+  author = {Doe, Jane},
+  title = {A Poem},
+  translator = {Smith, John},
+  pages = {56–57},
+  booktitle = {A Volume of Poems},
+  editor = {Jones, David},
+  editortype = {booktitle},
+  bookvolume = {2},
+  year = {2018},
+  bookbooktitle = {A Collection of Poems},
+  editora = {White, Amy},
+  editoratype = {bookbooktitle},
+  volumes = {4},
+  address = {Chicago},
+  publisher = ucp,
+  bookyear = {2016–18}
+}
+ at InBook{spinoza1900.1.1,
+  title = {A Theological-Political Treatise},
+  crossref = {spinoza1900.1}
+}
+ at Collection{spinoza1900.1,
+  author = {Spinoza, Benedict de},
+  title = {The Chief Works of Benedict de Spinoza},
+%  edition = {rev. ed.},% alternative to below:
+  edition = {revised},
+  translator = {Elwes, R. H. M.},
+  volume = {1},
+  address = {London},
+  publisher = {George Bell {and} Sons},
+  year = {1900}
+}
+ at InCollection{adams2018,
+  keywords = {notinbib,notinref},
+  author = {Adams, Mary},
+  title = {Another Poem},
+  pages = {128–32},
+  crossref = {jones2018}
+}
 
 % 13.65 Full in-text citation
 
@@ -682,7 +761,6 @@
 @Book{maclean1976,
   author = {Maclean, Norman},
   title = {A River Runs through It, and Other Stories},
-  shorttitle = {A River Runs through It},
   address = {Chicago},
   publisher = ucp,
   year = {1976}
@@ -1342,7 +1420,6 @@
   year = {1977}
 }
 @InBook{harley1994,
-  editor = {Harley, J. B. and Woodward, David},
   title = {Cartography in the Traditional East and Southeast Asian Societies},
   volume = {2},
   part = {bk. 2},
@@ -1350,6 +1427,7 @@
   crossref = {cartography1987}
 }
 @Collection{cartography1987,
+  editor = {Harley, J. B. and Woodward, David},
   title = {The History of Cartography},
   address = {Chicago},
   publisher = ucp,

Modified: trunk/Master/texmf-dist/doc/latex/windycity/windycity.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/windycity/windycity.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/windycity/windycity.tex	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/doc/latex/windycity/windycity.tex	2021-05-03 21:12:04 UTC (rev 59067)
@@ -1,4 +1,4 @@
-% Last modified: Sat 30 Jan 2021 06:32:36 PM CST
+% Last modified: Sun 02 May 2021 01:06:52 PM CDT
 \documentclass[11pt,letterpaper,oneside]{article}
 \usepackage{windycity}
 
@@ -8,7 +8,7 @@
 \author{Brian Chase}
 \email{brianmichaelchase at gmail.com}
 \website{https://github.com/brianchase/windycity}
-\version{2021-01-30}
+\version{2021-05-02}
 \maketitle
 \begingroup
 \hypersetup{linkcolor=black}
@@ -35,13 +35,13 @@
 
 The following sections assume familiarity with \textit{CMOS} and
 \biblatex. Section \ref{overview} gives a brief overview of the
-style's features. Section \ref{edtrans} discusses the assignment and
-placement of editors, translators, and the like. Section
-\ref{collections} discusses several issues with collections, including
-options for formatting citations of individual volumes. Sections
-\ref{notes} and \ref{paren} reproduce examples from \textit{CMOS}
-chapters 14 and 15, respectively, with occasional commentary and
-references to other sections.
+style's features. Section \ref{editors} discusses the assignment and
+placement of editors and translators. Section \ref{collections}
+discusses several issues with collections, including options for
+formatting citations of individual volumes. Sections \ref{notes} and
+\ref{paren} reproduce examples from \textit{CMOS} chapters 14 and 15,
+respectively, with occasional commentary and references to other
+sections.
 
 Windy City requires \biblatex version 3.13 or later.
 
@@ -63,10 +63,12 @@
 
 Either way, please consider downloading the most recent release of
 Windy City from \begingroup \hypersetup{urlcolor=blue}
-\href{https://www.ctan.org/pkg/windycity}{its home on CTAN}. More
-recent but potentially less reliable updates are available from Windy
-City's \href{https://github.com/brianchase/windycity}{repository on
-GitHub}.\endgroup
+\href{https://www.ctan.org/pkg/windycity}{its home on CTAN}. Releases
+without the PDF user guide are available from Windy City's
+\href{https://github.com/brianchase/windycity/releases}{repository on
+GitHub}. More recent but potentially less reliable updates are
+available on \href{https://github.com/brianchase/windycity}{the main
+project page}.\endgroup
 
 Windy City consists of four files:
 
@@ -198,11 +200,11 @@
 the end of this document.) For best results, use the \opt{reflist}
 preamble option.
 
-As you proceed through the this guide, note that all examples of
-citations and bibliographies are outputs of the style from commands
-that you can inspect in the document's source, \file{windycity.tex},
-and in its style file, \file{windycity.sty}. Almost all citations are
-from \cmd{cite} or \cmd{parencite}. A few are from more specialized
+As you proceed through this guide, note that all examples of citations
+and bibliographies are outputs of the style from commands that you can
+inspect in the document's source, \file{windycity.tex}, and in its
+style file, \file{windycity.sty}. Almost all citations are from
+\cmd{cite} or \cmd{parencite}. A few are from more specialized
 commands, such as \cmd{cite*} or \cmd{cites}. All example
 bibliographies are outputs of the style from \cmd{printbibliography}.
 All bibliographic data reside in \file{windycity.bib}.
@@ -211,7 +213,7 @@
 \label{short}
 
 Standard citations may take a variety of shorter forms. Windy City
-offers several preamble options and other means for reproducing them.
+offers several preamble options and other means for producing them.
 
 Let's start with another passage of default output:
 
@@ -308,17 +310,19 @@
 \item \cite[33]{morrison2004a}
 \end{citeonly}
 
-Other ways to make citations more concise: For a compromise between
-standard and short forms, try the  preamble option \opt{shortfirst}.
-It swaps long first citations for short ones but otherwise follows the
-standard (see section \ref{preamble}). Also with standard citations,
-the preamble option \opt{idemtracker} shortens the author's name of a
-work's first citation if the previous citation is of the same author
-(see section \ref{preamble}). The entry option \opt{noauth} omits the
-author's name altogether (see section \ref{entry}). And the
-\bibfield{shorthand} field allows you to set an abbreviation to stand
-in place of the author's name, the work's title, and other elements of
-a citation (see sections \ref{otherfields} and \ref{14.59}).
+For a compromise between standard and short forms, try the  preamble
+option \opt{shortfirst}. It swaps long first citations for short ones
+but otherwise follows the standard form (see section \ref{preamble}).
+For another variant, try \opt{shortafter}, which gives the same output
+as \opt{short} but with long first citations. Also with standard
+citations, the preamble option \opt{idemtracker} shortens the author's
+name of a work's first citation if the previous citation is of the
+same author (see section \ref{preamble}). The entry option
+\opt{noauth} omits the author's name altogether (see section
+\ref{entry}). And the \bibfield{shorthand} field allows you to set an
+abbreviation to stand in place of the author's name, the work's title,
+and other elements of a citation (see sections \ref{otherfields} and
+\ref{14.59}).
 
 \subsection{Preamble Options}
 \label{preamble}
@@ -380,7 +384,7 @@
 \noindent This option controls whether consecutive citations of a work
 on the same page receive an \textit{ibid}. The qualification ``on the
 same page'' means that \textit{ibid.} always refers to a work cited on
-the current page without an \textit{ibid.} The latter isn't a
+the current page without an \textit{ibid}. The latter isn't a
 requirement of \textit{CMOS} but seems reasonable, since it prevents
 readers from having to look at another page to find the referent of an
 \textit{ibid}. For examples of its output, see section \ref{short} and
@@ -439,13 +443,10 @@
 
 \noindent As shown in section \ref{short}, this option prints short
 citations (see \textit{CMOS} \ref{14.34}). The use of \opt{short} has
-one feature in common with \opt{ibid}: Just as \textit{ibid.} appears
-only for consecutive citations of a work on the same page, and so
-never refers to a citation on a previous page, \opt{short} affects
-consecutive citations of a work on the same page, never in reference
-to a citation on a previous page. As with \textit{ibid.}, this feature
-isn't required by \textit{CMOS}, but it prevents readers from having
-to look at another page to find the title of a citation.
+one feature in common with \opt{ibid}: It affects only consecutive
+citations of a work on the same page. As with \textit{ibid.}, this
+feature isn't required by \textit{CMOS}, but it prevents readers from
+having to look at another page to find the title of a citation.
 
 In contexts where \opt{short} would drop a title from a citation, but
 where no name occupies the author's position, it prints the work's
@@ -457,6 +458,43 @@
 as \opt{shortfirst}. But recall from section \ref{short} that you can
 combine \opt{short} and \opt{ibid} for more concise output.
 
+\optitem[false]{shortafter}{\opt{true}, \opt{false}}
+
+\noindent If you want the output of \opt{short} but with long first
+citations, use \opt{shortafter}. Compare the following with examples
+in \textit{CMOS} \ref{14.34}:
+
+% The option 'short' implies the option 'shortfirst'. The option
+% 'shortafter' doesn't. Hence, to display the output of 'shortafter'
+% below, you need only toggle true 'short'.
+
+\begin{citeonly}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[3]{morrison2004a}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[18]{morrison2004a}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[18]{morrison2004a}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[24--26]{morrison2004a}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[401-2]{morrison2004b}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[433]{morrison2004b}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[37--38]{diaz2008}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[403]{morrison2004b}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[152]{diaz2008}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[201-2]{diaz2008}
+\AtNextMultiCite{\toggletrue{short}}
+\item \cites[240]{morrison2004b}[32]{morrison2004a}
+\AtNextCitekey{\toggletrue{short}}
+\item \cite[33]{morrison2004a}
+\end{citeonly}
+
 \optitem[false]{shortfirst}{\opt{true}, \opt{false}}
 
 \noindent Use this option to shorten a work's first citation. The
@@ -463,9 +501,9 @@
 resulting output consists mainly of the author's name and the work's
 title. According to \textit{CMOS}, this approach is optional for
 documents with complete bibliographies. (See \textit{CMOS}
-\ref{14.23}, also 14.29--14.36.) You may use \opt{shortfirst} in
-conjunction with \opt{ibid}. However, it adds nothing to \opt{short},
-which has the same effect on first citations.
+\ref{14.23}, also 14.29--14.36.) As with \opt{short}, you may use
+\opt{shortfirst} in conjunction with \opt{ibid} for more concise
+citations.
 
 \optitem[false]{shortlinks}{\opt{true}, \opt{false}}
 
@@ -476,8 +514,8 @@
 citation (minus some punctuation). With \opt{shortlinks}, they're
 embedded in just one element: the title or, if no title is present,
 whatever part of the citation occupies the author's position, such as
-the author's name, \textit{ibid.}, or a shorthand. For comparison,
-here's what default links are like in blue:
+the author's name, \textit{ibid.}, or a shorthand. For comparison, the
+blue text below shows default links:
 
 \hypersetup{citecolor=blue}
 \begin{citeonly}
@@ -520,10 +558,9 @@
 \subsection{Entry Options}
 \label{entry}
 
-An entry option is a value for the \bibfield{options} field of a
-work's database entry. It affects the format of that particular work.
-For options that affect the format of every work, see section
-\ref{preamble}.
+An entry option goes in the \bibfield{options} field of a work's
+database entry. It affects the format of that work. For options that
+affect the format of every work, see section \ref{preamble}.
 
 \begin{optionlist}
 
@@ -604,7 +641,7 @@
 translator, use \opt{swapauth}. This option works for \bibtype{book},
 \bibtype{bookinbook}, \bibtype{collection}, \bibtype{inbook}, and
 \bibtype{incollection} entry types. For more information, see section
-\ref{edtranspos}.
+\ref{editors:swap}.
 
 \optitem[false]{swaptrans}{\opt{true}, \opt{false}}
 
@@ -611,15 +648,68 @@
 \noindent According to \textit{CMOS}, if a work has an editor and a
 translator, their names should appear in citations in the order in
 which they appear on the work's title page (see \textit{CMOS}
-\ref{14.104}). By default, the style lists editors first. Entries with
-the option \bibfield{swaptrans} reverse this order: Their translators
-print first. If a work's translators and editors are the same,
-\bibfield{swaptrans} reverses the order of their roles, say, from
-\textit{edited and translated by} to \textit{translated and edited
-by}. The same goes for compilers, revisers, and updaters, which the
-style treats as specialized editors. For more information, see section
-\ref{edtranspos}.
+\ref{14.104}). By default, the style lists editors first. The option
+\bibfield{swaptrans} reverses this order: Their translators print
+first. If a work's translators and editors are the same,
+\bibfield{swaptrans} reverses their roles, say, from \textit{edited
+and translated by} to \textit{translated and edited by}. The same goes
+for compilers, expanders, revisers, and updaters---all of whom the
+style treats as specialized editors. For editors and translators of an
+\bibfield{issuetitle}, \bibfield{maintitle}, or \bibfield{series}, see
+their respective options below. See also section \ref{editors:swap}.
 
+\optitem[false]{swaptrans:book}{\opt{true}, \opt{false}}
+
+A short form of \opt{swaptrans:booktitle}. See below.
+
+\optitem[false]{swaptrans:bookbook}{\opt{true}, \opt{false}}
+
+A short form of \opt{swaptrans:bookbooktitle}. See below.
+
+\optitem[false]{swaptrans:bookbooktitle}{\opt{true}, \opt{false}}
+
+Like \opt{swaptrans} but narrower in scope. It applies only to the
+editors and translators of a \bibfield{bookbooktitle} (a double
+cross-referenced \bibfield{title}). See section \ref{editors:swap}.
+
+\optitem[false]{swaptrans:booktitle}{\opt{true}, \opt{false}}
+
+Like \opt{swaptrans} but narrower in scope. It applies only to the
+editors and translators of a \bibfield{booktitle} (a cross-referenced
+\bibfield{title}). See section \ref{editors:swap}.
+
+\optitem[false]{swaptrans:issue}{\opt{true}, \opt{false}}
+
+A short form of \opt{swaptrans:issuetitle}. See below.
+
+\optitem[false]{swaptrans:issuetitle}{\opt{true}, \opt{false}}
+
+Like \opt{swaptrans} but for editors and translators of an
+\bibfield{issuetitle}.
+
+\optitem[false]{swaptrans:main}{\opt{true}, \opt{false}}
+
+A short form of \opt{swaptrans:maintitle}. See below.
+
+\optitem[false]{swaptrans:maintitle}{\opt{true}, \opt{false}}
+
+Like \opt{swaptrans} but for editors and translators of a
+\bibfield{maintitle}.
+
+\optitem[false]{swaptrans:series}{\opt{true}, \opt{false}}
+
+Like \opt{swaptrans} but for editors and translators of a
+\bibfield{series}.
+
+\optitem[false]{swaptrans:title}{\opt{true}, \opt{false}}
+
+Like \opt{swaptrans} but narrower in scope. It applies only to the
+editors and translators of a \bibfield{title}, whereas
+\bibfield{swaptrans} also affects those of a \bibfield{booktitle} (a
+cross-referenced \bibfield{title}) and a \bibfield{bookbooktitle} (a
+double cross-referenced \bibfield{title}). See section
+\ref{editors:swap}.
+
 \optitem[false]{swapvol}{\opt{true}, \opt{false}}
 
 \noindent As an entry option, \opt{swapvol} does on a case-by-case
@@ -674,7 +764,7 @@
 \noindent New users should get comfortable with \cmd{cite} and
 \cmd{footcite} (for notes) and \cmd{parencite} (for parenthetical
 citations). Their multicite forms---\cmd{cites}, \cmd{footcites}, and
-\cmd{parencites}---take comma-separated lists of entry keys, while
+\cmd{paren\-cites}---take comma-separated lists of entry keys, while
 allowing you to specify distinct \bibfield{prenote} and
 \bibfield{postnote} fields for each work.
 
@@ -997,7 +1087,8 @@
 \label{stdfields}
 
 Examples in this document don't always make it clear how Windy City
-uses standard data fields. The section discusses some of them.
+uses standard data fields. The list below highlights a selection of
+fields that merit special attention.
 
 \begin{marglist}
 
@@ -1012,7 +1103,7 @@
 \item \cite{hawkes1834}
 \end{citebib}
 
-With respect to pseudonymous authors, another solution is to use the
+For pseudonymous authors, another solution is to use the
 \bibfield{nameaddon} field. Unlike with \bibfield{authtype},
 \bibfield{nameaddon} allows you to include an author's given name in
 the brackets. For examples, see \textit{CMOS} \ref{14.81}.
@@ -1022,7 +1113,7 @@
 edition. To indicate a revised edition, enter either \textit{revised}
 or \textit{rev. ed.} Both options give the same output. For expanded
 and updated editions, you may use \textit{expanded} or
-\textit{updated}. Add additional data as necessary. For the following
+\textit{updated}. Add additional data as necessary. In the following
 example from \textit{CMOS} bibliography 2.4, \bibfield{edition}
 contains \textit{updated edition by Arlene O'Sean and Antoinette
 Schleyer}:
@@ -1039,9 +1130,9 @@
 \biblatex provides for electronic publishing information, even though
 the output doesn't conform to \textit{CMOS}. To that end, you may use
 the \bibfield{eprint} field, along with its cousins
-\bibfield{eprinttype} and \bibfield{eprintclass}, and all the
-associated options (\opt{eprint}, \opt{doi}, and \opt{url}), which are
-set to \textit{true} by default.
+\bibfield{eprinttype} and \bibfield{eprintclass}, and associated
+options (\opt{eprint}, \opt{doi}, and \opt{url}), all of which are set
+to \textit{true} by default.
 
 \item[issue] Windy City uses this field with \bibtype{article},
 \bibtype{online}, and \bibtype{review} entry types (and their aliases)
@@ -1087,7 +1178,7 @@
 \textit{CMOS} \ref{14.172}). For forthcoming works, see \textit{CMOS}
 \ref{14.146}, \ref{14.172}, and \ref{15.45}. Forthcoming works also
 print correctly with \textit{forthcoming} in the \bibfield{year}
-field, as previous versions of the style required.
+field.
 
 \begin{bibonly}
 \nocite{faraday,huang2015,jubb2015,lucki1980}
@@ -1118,12 +1209,13 @@
 bibliographic information doesn't allow Windy City to distinguish a
 journal article from a magazine or newspaper article. This happens
 when a magazine or newspaper article has an issue number. Normally,
-Windy City would respond by printing the issue number before the date
-and enclosing the date in parentheses. But the issue number needs to
-go first, and the date shouldn't be in parentheses. The workaround is
-to include a \bibfield{type} field with the value \textit{newsmag}.
-For an example, see \textit{CMOS} \ref{14.204} and compare it with the
-citation of Beattie in \ref{14.171}.
+Windy City prints an issue number before the date and encloses the
+date in parentheses. But for magazine and newspaper articles, the
+issue number should go first, and the date shouldn't be in
+parentheses. The workaround is to include a \bibfield{type} field with
+the value \textit{newsmag}. For an example, see \textit{CMOS}
+\ref{14.204} and compare it with the citation of Beattie in
+\ref{14.171}.
 
 \end{marglist}
 
@@ -1132,10 +1224,10 @@
 
 Some of Windy City's nonstandard data fields are for its internal
 handling of cross-referencing. Those fields aren't listed below, as
-they're not meant for use in a bibliography database. The rest store
-information that's crucial for correct formatting. Without them, quite
-a few citations in this document wouldn't match their counterparts in
-\textit{CMOS}.
+they're not usually meant for use in a bibliography database (but see
+section \ref{editors.other}). The rest store information that's
+crucial for correct formatting. Without them, quite a few citations in
+this document wouldn't match their counterparts in \textit{CMOS}.
 
 \begin{marglist}
 
@@ -1144,17 +1236,24 @@
 mind that blog posts take the usual \bibfield{title} and
 \bibfield{subtitle} fields.
 
-\item[editoraddon] Use this field to include additional editorial
-information about a book. It's available for \bibtype{book},
-\bibtype{incollection}, and \bibfield{review} entry types and their
-aliases. (For information on aliases in Windy City, see section
-\ref{entrytypes}.) When applicable, its content appears after a book's
-editors and translators without intervening punctuation. For an
-example, see section \ref{entry}, where the citation of
-\textit{Chaucer Life-Records} prints: ``from materials compiled by
-John M. Manly and Edith Richert, with the assistance of Lilian J.
-Redstone et al.''
+\item[editoraddon] This field holds editorial information about a work
+that belongs immediately after \bibfield{editor} has printed, without
+intervening punctuation. For an example, see \textit{CMOS}
+\ref{14.105}, where the citation of \textit{Chaucer Life-Records}
+includes: ``from materials compiled by John M. Manly and Edith
+Richert, with the assistance of Lilian J. Redstone et al.'' This field
+doesn't print when \bibfield{editor} prints in the author's position.
+As a result, options that may affect where \bibfield{editor} prints,
+such as \opt{swaptrans} and \opt{swapauth}, may affect whether
+\bibfield{editoraddon} prints.
 
+% The main function of 'editoraaddon' is to inherit 'editoraddon'
+% during cross-referencing. I don't expect anyone to use it in a
+% bibliography database.
+
+%\item[editoraaddon] Like \bibfield{editoraddon} but for
+%\bibfield{editora}.
+
 \item[seriesaddon] This field is for additional information about a
 book's series. That includes information about the run of a series,
 such as \textit{2nd ser.} and \textit{n.s.} For examples, see
@@ -1165,16 +1264,16 @@
 
 \item[shorthand] Windy City doesn't automatically italicize a
 \bibfield{shorthand}. Per \textit{CMOS} 14.60, a shorthand should be
-italicized if the title that it abbreviates is italicized. Set it the
-bibliography database with \cmd{emph} or \cmd{mkbibemph}. For examples
-of a \bibfield{shorthand}, see section \ref{14.59} and the first
-citation of \textit{CMOS} in this document's introduction.
+italicized if the title that it abbreviates is italicized. Set it in
+the bibliography database with \cmd{emph} or \cmd{mkbibemph}. For
+examples of a \bibfield{shorthand}, see section \ref{14.59} and the
+first citation of \textit{CMOS} in this document's introduction.
 
 \item[shorthandintro] You may override the default announcement of a
 \bibfield{shorthand} by adding your preferred content to
-\bibfield{shorthandintro}. For an example, see the first citation of
-\textit{CMOS} in this document's introduction, where the announcement
-is a separate sentence, rather than in parentheses.
+\bibfield{shorthandintro}. See the first citation of \textit{CMOS} in
+this document's introduction, where the announcement isn't a note in
+parentheses but its own sentence.
 
 \item[shortmaintitle] This field contains the short form of a
 \bibfield{maintitle}. It should only be necessary for certain works in
@@ -1183,24 +1282,40 @@
 
 \end{marglist}
 
-\section{Editors, Translators, and Friends}
-\label{edtrans}
+\section{Editors and Translators}
+\label{editors}
 
-Windy City offers significant control over the handling of editors,
-translators, and the like. Taking advantage of it, however, may not
-seem intuitive at first. This section covers all the relevant features
-and options.
+Windy City offers significant control over the handling of editors and
+translators. Taking advantage of it, however, may not seem intuitive
+at first. This section covers all the relevant features and options.
 
 \subsection{Types of Editors and Translators}
-\label{edtransnames}
 
-For the most part, Windy City associates the \bibfield{editor} and
-\bibfield{translator} fields with the lowest level title within the
-scope of an entry. In most cases, then, you can assign editors and
-translators simply by adding the \bibfield{editor} and
-\bibfield{translator} fields to a database entry. The entry below is
-an example from \textit{CMOS} \ref{14.104}:
+Windy City has four name lists for editors (\bibfield{editor},
+\bibfield{editora}, \bibfield{editorb}, and \bibfield{editorc}) and
+three name lists for translators (\bibfield{translator},
+\bibfield{translatora}, and \bibfield{translatorb}). At points where
+it's prepared to print them, it cycles through one or both sets of
+lists, depending on the context, looking for names to print. The set
+of editors starts with \bibfield{editor}, followed by
+\bibfield{editora}, and so on. The set of translators starts with
+\bibfield{translator}, followed by \bibfield{translatora}, and so on.
+Editors precede translators, unless you reverse the order with a
+\opt{swaptrans} entry option (see section \ref{editors:swap}). Within
+each set, the style prints the first name list that meets its criteria
+for that context. Apart from exceptions discussed below, you can
+assign any editor or translator name list to any \bibfield{title},
+\bibfield{issuetitle}, \bibfield{maintitle}, or \bibfield{series}.
 
+\subsubsection{The Basics}
+\label{editors:basics}
+
+In most cases, you'll assign editors and translators to a
+\bibfield{title}. Since it's the default assignment, you can do this
+just by adding the \bibfield{editor} and \bibfield{translator} fields
+to a database entry. The entry below is an example from \textit{CMOS}
+\ref{14.104}:
+
 \begin{verbatim}
    @Collection{adorno1999,
      author = {Adorno, Theodor W. and Benjamin, Walter},
@@ -1220,14 +1335,13 @@
 \noindent When the style processes this entry, it identifies the
 editor and translator of the work with the names in the
 \bibfield{editor} and \bibfield{translator} fields. Since the entry
-doesn't use the \opt{swaptrans} entry option (see section
-\ref{edtranspos}), the resulting output lists the editor and
+doesn't use \opt{swaptrans}, the resulting output lists the editor and
 translator, in that order, after the authors and title.
 
 Cross-referencing introduces a bit more complexity, but the principle
 is the same: Within the scope of an entry, the style associates
-\bibfield{editor} and \bibfield{translator} with the lowest level
-title. In this example from \textit{CMOS} \ref{14.30}, an essay is
+\bibfield{editor} and \bibfield{translator} with \bibfield{title}. In
+this example from \textit{CMOS} \ref{14.30}, an essay is
 cross-referenced to a collection:
 
 \begin{verbatim}
@@ -1288,11 +1402,51 @@
 
 \noindent By the same token, since \bibfield{editor} falls within the
 scope of \bibtype{collection}, the style associates it with
-\textit{The Renaissance Philosophy of Man}.
+\textit{The Renaissance Philosophy of Man}, not ``The Ascent of Mont
+Ventoux.''
 
-The style supports three more basic editorial roles: compiler,
-reviser, and updater. To assign them, you need to use the
-\bibfield{editortype} field. It may help to see the bibliography
+Windy City supports a second tier of editors after \bibfield{title},
+\bibfield{issuetitle}, \bibfield{maintitle}, and \bibfield{series}.
+Again, in your bibliography database, make sure to list editors in the
+proper order: \bibfield{editor} before \bibfield{editora}, and so on.
+Second tier editors never print in the author's position, even when
+the first does. They always print after the relevant title.
+
+In the examples below, the editors print correctly because there's no
+ambiguity about which title they're responsible for. Both fall within
+the same entry, \bibfield{carter2012}, where their default assignment
+is \textit{A Performer's Guide}. Citing a child entry,
+\bibfield{myers2012}, places the editors after the collection's title,
+starting with \bibfield{editor}, whereas citing the parent places
+\bibfield{editor} in the author's position and \bibfield{editora}
+after the collection's title.
+
+\begin{verbatim}
+   @InCollection{myers2012,
+     author = {Myers, Herbert},
+     title = {Pitch and Transposition},
+     pages = {375--393},
+     crossref = {carter2012}
+   }
+   @Collection{carter2012,
+     title = {A Performer's Guide to Seventeenth-Century Music},
+     editor = {Carter, Stewart},
+     editora = {Kite-Powell, Jeffery},
+     editoratype = {revex},
+     address = {Bloomington},
+     publisher = {Indiana University Press},
+     year = {2012}
+   }
+\end{verbatim}
+
+\begin{bibonly}
+\nocite{myers2012,carter2012}
+\end{bibonly}
+
+As the examples above also indicate, the style supports a variety of
+editorial roles beyond just editor and translator. They are: compiler,
+expander, reviser, and updater. To assign them, you need to use the
+editor and translator type fields. Below are some bibliography
 database entries for examples in \textit{CMOS} \ref{14.103} and
 \ref{14.142}:
 
@@ -1326,17 +1480,26 @@
 \item \cite{turabian2013}
 \end{citebib}
 
-In addition to the five basic roles (editor, translator, compiler,
-reviser, and updater), you may assign names to any pair of them. A
-work's editor, for example, can also be its translator, compiler,
-reviser, or updater---but no more than one of these. And just as you
-can swap the order of the editor and translator roles (again, see
-section \ref{edtranspos}), you can swap all other combinations, say,
-to identify a work as \textit{compiled and edited by} Jane Doe rather
-than \textit{edited and compiled by} her. Simply change the value of
-\bibfield{editortype}. A summary of these values appears in Table
-\ref{table:ed}.
+You may combine all six editorial roles in pairs. A work's editor, for
+example, can also be its translator, compiler, expander, reviser, or
+updater---but no more than one of these. Simply put the proper value
+in the corresponding type field. We saw this with \textit{A
+Performer's Guide}, where the bibliography string \textit{revex}
+identified Jeffery Kite-Powell as the work's reviser and expander.
+These are the key lines:
 
+\begin{verbatim}
+   editora = {Kite-Powell, Jeffery},
+   editoratype = {revex},
+\end{verbatim}
+
+\noindent Combinations that involve a translator's role, such as
+\textit{translated and compiled by}, respond to the \opt{swaptrans}
+options discussed in section \ref{editors:swap}. For these dual roles,
+however, it's probably less confusing in the long run to change values
+in the editor and translator type fields. The choice is yours. Table
+\ref{editors:table} lists all editor and translator roles.
+
 \begin{table}[H]
 \begin{tabular}{@{}r l r l@{}}
 \bibfield{editortype} & Assignment & \bibfield{editortype} & Assignment\\
@@ -1343,23 +1506,30 @@
 \toprule
 compiler & compiler & reviser & reviser\\
 comped & compiler and editor & revcomp & reviser and compiler\\
-comprev & compiler and reviser & reved & reviser and editor\\
+compex & compiler and expander & reved & reviser and editor\\
+comprev & compiler and reviser & revex & reviser and expander\\
 comptrans & compiler and translator & revtrans & reviser and translator\\
 compup & compiler and updater & revup & reviser and updater\\
-edcomp & editor and compiler & edrev & editor and reviser\\
-transcomp & translator and compiler & transrev & translator and reviser\\
-\midrule
-updater & updater & uptrans & updater and translator\\
-upcomp & updater and compiler & edup & editor and updater\\
-uped & updater and editor & transup & translator and updater\\
-uprev & updater and reviser & &\\
+editor & editor & translator & translator\\
+edcomp & editor and compiler & transcomp & translator and compiler\\
+edex & editor and expander & transed & translator and editor\\
+edrev & editor and reviser & transex & translator and expander\\
+edtrans & editor and translator & transrev & translator and reviser\\
+edup & editor and updater & transup & translator and updater\\
+expander & expander & updater & updater\\
+excomp & expander and compiler & upcomp & updater and compiler\\
+exed & expander and editor & uped & updater and editor\\
+exrev & expander and reviser & upex & updater and expander\\
+extrans & expander and translator & uprev & updater and reviser\\
+exup & expander and updater & uptrans & updater and translator\\
 \end{tabular}
-\caption{}\label{table:ed}
+\caption{}\label{editors:table}
 \end{table}
 
-For examples in \textit{CMOS}, we need to turn to the bibliography.
-The first one below shows the output of \textit{reved} in the
-\bibfield{editortype} field, the second of \textit{revup}.
+For examples in \textit{CMOS} that use values from Table
+\ref{editors:table}, we need to turn to the book's bibliography. The
+first example below shows the effect of \textit{reved}, the second of
+\textit{revup}.
 
 \begin{citebib}
 \item \cite{fowler1965}
@@ -1366,24 +1536,102 @@
 \item \cite{gowers2015}
 \end{citebib}
 
-% Try swapping the editor type in the entries above for other values
-% in Table \ref{table:ed}. Note that \textit{edrev} is the reverse of
-% \textit{reved}---\textit{edited and revised by} instead of
-% \textit{revised and edited by}. So, too, for \textit{comprev} and
-% \textit{revcomp}, \textit{comptrans} and \textit{transcomp}, and so
-% on.
+For editors and translators with more than two roles per title, you
+need to print more than one name list, either an editor name list and
+a translator name list or two editor names lists (see the previous
+discussion of second tier editors). This allows for complex
+assignments such as ``Edited and Translated by Jane Doe. Revised and
+Updated by Jane Doe and John Smith.'' What's not allowed is listing
+three or more roles at once, as in ``Edited, Translated, and Revised
+by Jane Doe.''
 
-Missing from Table \ref{table:ed} are \textit{editor},
-\textit{translator}, \textit{edtrans}, and \textit{transed}. Windy
-City has bibliography strings for them, too, but they're meant for the
-style's internal use. It determines which of them applies, if any,
-based on the contents of the \bibfield{editor} and
-\bibfield{translator} fields and the option \opt{swaptrans}. You never
-need to use them in a bibliography database.
+\subsubsection{Other Options and Titles}
+\label{editors:other}
 
-Three more values of \bibfield{editortype} allow you to assign editors
-to higher level titles: \textit{maintitle}, \textit{series}, and
-\textit{issuetitle}. Here's an example from \textit{CMOS}
+Windy City simplifies the assignments of editors and translators in
+several ways. For one, the default assignment of every editor name
+list is \textit{editor}, and the default assignment of every
+translator name list is \textit{translator}. As a result, you never
+need to use the values \textit{editor} or \textit{translator} in the
+type fields. It's strictly optional. The name fields alone set the
+correct assignment.
+
+Much the same holds when the editor and translator of a work are the
+same. The usual way to set this assignment is with identical name
+lists:
+
+\begin{verbatim}
+   editor = {Doe, Jane},
+   translator = {Doe, Jane},
+\end{verbatim}
+
+\noindent This gives a default assignment of \textit{editor and
+translator} (\textit{edtrans} from Table \ref{editors:table}), unless you
+use the appropriate \opt{swaptrans} entry option, which gives
+\textit{translator and editor} (\textit{transed} from Table
+\ref{editors:table}). No editor or translator type field is necessary.
+
+When type fields are required, Windy City offers flexibility over how
+you structure your bibliography entries: If you like, you can set the
+assignment with just one editor or translator type field and its
+corresponding name field, or with both name fields and one type field,
+or with both name fields and both type fields. To set Jane Doe as the
+compiler and translator of a \bibfield{title}, Windy City treats all
+five options below as equivalent:
+
+\begin{enumerate}[itemsep=0.2\baselineskip]
+
+\item
+
+\begin{verbatim}
+   editor = {Doe, Jane},
+   editortype = {comptrans},
+\end{verbatim}
+
+\item
+
+\begin{verbatim}
+   translator = {Doe, Jane},
+   translatortype = {comptrans},
+\end{verbatim}
+
+\item
+
+\begin{verbatim}
+   editor = {Doe, Jane},
+   translator = {Doe, Jane},
+   editortype = {comptrans},
+\end{verbatim}
+
+\item
+
+\begin{verbatim}
+   editor = {Doe, Jane},
+   translator = {Doe, Jane},
+   translatortype = {comptrans},
+\end{verbatim}
+
+\item
+
+\begin{verbatim}
+   editor = {Doe, Jane},
+   translator = {Doe, Jane},
+   editortype = {comptrans},
+   translatortype = {comptrans},
+\end{verbatim}
+
+\end{enumerate}
+
+The last option above raises the possibility that editor and
+translator type fields may conflict. What if the editor type is
+\textit{comptrans} and the translator type is something else, say,
+\textit{extrans}? If the editors and translators are the same, but the
+type fields differ, Windy City reads the editor type field and ignores
+the translator type field.
+
+Three more values for type fields allow you to assign editors and
+translators to \bibfield{issuetitle}, \bibfield{maintitle}, and
+\bibfield{series}. Here's an example from \textit{CMOS}
 \ref{14.123}:
 
 \begin{verbatim}
@@ -1404,56 +1652,120 @@
 \item \cite{allen2009}
 \end{citebib}
 
-\noindent If there were no \bibfield{editortype} assigning the editor
-to the series, the output would list a book's editor. In short, for a
-title's compilers, revisers, and updaters and for any title at a
-higher level than \bibfield{title}, you need to use
-\bibfield{editortype}. Combined with Windy City's support for citing
-articles, chapters, books, and other works within books, this scheme
-allows for several sets of editors per work, although it does limit
-you to just one set of compilers, revisers, and updaters.
+\noindent If there were no \bibfield{editortype} with the value
+\textit{series}, the style would have assigned \bibfield{editor} to
+\bibfield{title}. The same goes for \bibfield{issuetitle} and
+\bibfield{maintitle}: Assign editors and translators to them by
+putting \textit{issuetitle} and \textit{maintitle} in the relevant
+type fields.
 
-What about translators? Unless a work's bibliography database entry
-has a \bibfield{translatortype} field with the value
-\textit{maintitle}, Windy City associates the names in
-\bibfield{translator} with the entry's lowest level title. (Recall
-``The Ascent of Mont Ventoux'' above.) You should rarely, and perhaps
-never, need more than one set of translators per work. But if you do,
-Windy City lets you assign as many as three---as long as you
-cross-reference a work with one set of translators to another with
-two.
+With the help of strings from Table \ref{editors:table}, all editor and
+translator types are available to \bibfield{issuetitle},
+\bibfield{maintitle}, and \bibfield{series}. Commas function as
+delimiters. To take the previous example, you could list Catharine
+Stimpson as the editor and compiler of the series by putting the
+values \textit{series,edcomp} or \textit{edcomp,series} in
+\bibfield{editortype}.
 
-The style has three other name lists for editors: \bibfield{editora},
-\bibfield{editorb}, and \bibfield{editorc}. If a work has more than
-one set of editors, list editors of the lowest level title in
-\bibfield{editor}. Usually, those are editors of a \bibfield{title}.
-The next level up, as it were, is for \bibfield{editora}, followed by
-\bibfield{editorb}, then \bibfield{editorc}. Remember to include the
-appropriate \bibfield{type} field to indicate an editor's role. These
-fields are \bibfield{editortype} (for \bibfield{editor}),
-\bibfield{editoratype} (for \bibfield{editora}),
-\bibfield{editorbtype} (for \bibfield{editorb}), and
-\bibfield{editorctype} (for \bibfield{editorc}).
+Almost any entry that relies on cross-referencing can be written
+without it. Doing so, however, requires some fields in your
+bibliography database that are usually meant for the style's internal
+use. These fields include \bibfield{booktitle} (a cross-referenced
+\bibfield{title}) and \bibfield{bookbooktitle} (a double
+cross-referenced \bibfield{title}---a \bibfield{title}
+cross-referenced by a cross-referenced \bibfield{title}). To
+accommodate entries that don't use cross-referencing, the style
+accepts the values \textit{booktitle} and \textit{bookbooktitle} in
+editor and translator type fields. An example of double
+cross-referencing will set us up to use both:
 
-As it happens, Windy City puts a lot of effort into sorting out where
-to print the names of editors and translators, so it's a bit more
-clever than the previous paragraph suggests. In particular, if you use
-\bibfield{editortype} to assign an \bibfield{editor} to a
-\bibfield{maintitle} or some other higher level title, and have an
-\bibfield{editora} with no corresponding \bibfield{editoratype}, Windy
-City will assume that \bibfield{editora} is the editor of the
-\bibfield{title}. Regardless, the best practice is to the follow the rule
-of thumb described above, reserving \bibfield{editor} for
-\bibfield{title} and working up from there.
+\begin{verbatim}
+   @InCollection{doe2018,
+     options = {swapvol},
+     author = {Doe, Jane},
+     title = {A Poem},
+     translator = {Smith, John},
+     pages = {56–57},
+     crossref = {jones2018}
+   }
+   @InBook{jones2018,
+     editor = {Jones, David},
+     title = {A Volume of Poems},
+     volume = {2},
+     year = {2018},
+     crossref = {white2016}
+   }
+   @Collection{white2016,
+     editor = {White, Amy},
+     title = {A Collection of Poems},
+     volumes = {4},
+     address = {Chicago},
+     publisher = {University of Chicago Press},
+     year = {2016–18}
+   }
+\end{verbatim}
 
+\begin{citebib}
+\item \cite[56]{doe2018}
+\end{citebib}
+
+\noindent The following alternative dispenses with \bibfield{crossref}
+but needs two editor type fields, plus two other fields that don't
+usually appear in bibliography databases: \bibfield{bookvolume} (a
+cross-referenced \bibfield{volume}) and \bibfield{bookyear} (a
+cross-referenced \bibfield{year}).
+
+\begin{verbatim}
+   @InCollection{doe2018.alt,
+     author = {Doe, Jane},
+     title = {A Poem},
+     translator = {Smith, John},
+     pages = {56–57},
+     booktitle = {A Volume of Poems},
+     editor = {Jones, David},
+     editortype = {booktitle},
+     bookvolume = {2},
+     year = {2018},
+     bookbooktitle = {A Collection of Poems},
+     editora = {White, Amy},
+     editoratype = {bookbooktitle},
+     volumes = {4},
+     address = {Chicago},
+     publisher = {University of Chicago Press},
+     bookyear = {2016–18}
+   }
+\end{verbatim}
+
+\begin{citebib}
+\item \cite[56]{doe2018.alt}
+\end{citebib}
+
+In short, for a title's compilers, expanders, revisers, and updaters,
+and for any title other than \bibfield{title}, you need to put the
+correct value of the assignment in the editor or translator type field
+that corresponds with the editor or translator name list
+(\bibfield{editortype} for \bibfield{editor},
+\bibfield{translatortype} for \bibfield{translator}, and so on).
+Combined with Windy City's support for citing articles, chapters,
+books, and other works within books, this scheme allows for several
+sets of editors per work.
+
 \subsection{Switching Places and Roles}
-\label{edtranspos}
+\label{editors:swap}
 
-Normally, Windy City lists editors first. But if translators are
-listed first on a work's title page, you should reverse the order (see
-\textit{CMOS} \ref{14.104}). For that, use the entry option
-\opt{swaptrans}. Compare:
+According to \textit{CMOS}, if a work has an editor and a translator,
+their names should appear in citations in the order in which they
+appear on the work's title page (see \textit{CMOS} \ref{14.104}). By
+default, the style lists editors first. To reverse the order, the
+style provides a suite of entry options that apply to the editors and
+translators of different titles. This means that if a work has
+multiple sets of editors and translators, you may swap positions of
+any set without affecting the others.
 
+For simplicity, let's focus on \opt{swaptrans}. This option swaps the
+editors and translators of works other than an \bibfield{issuetitle},
+\bibfield{maintitle}, or \bibfield{series}. Compare:
+
 \begin{citebib}
 \item \cite{doe2010a}
 \end{citebib}
@@ -1461,9 +1773,9 @@
 \item \cite{doe2010b}
 \end{citebib}
 
-If a work has no author, but has an editor, the style will print the
-editor's name in the author's position. The same happens if a work has
-no author but does have a translator. The following are examples from
+If a work has no author, but has editors, the style prints their names
+in the author's position. The same happens if a work has no author or
+editor but has translators. The following are examples from
 \textit{CMOS} \ref{14.103}:
 
 \begin{citebib}
@@ -1486,8 +1798,8 @@
 \end{citebib}
 
 Similarly, if a work's editors and translators are the same, the style
-will print the editors' role first, as in \textit{edited and
-translated by}. Reverse them with \opt{swaptrans}. From \textit{CMOS}
+prints the editors' role first, as in \textit{edited and translated
+by}. Reverse them with \opt{swaptrans}. From \textit{CMOS}
 \ref{14.104}:
 
 \begin{citebib}
@@ -1494,18 +1806,84 @@
 \item \cite{menchu1999}
 \end{citebib}
 
-To make switching roles easier in these cases, you may also use the
-relevant \bibfield{editortype} field with a bibliography string from
-Table \ref{table:ed}. After all, for compilers, revisers, and
-updaters, you need to put a value in \bibfield{editortype} anyway. So,
-if you pick one that begins with \textit{trans} (\textit{transcomp},
-\textit{transed}, \textit{transrev}, or \textit{transup}), Windy City
-will assume that the translator's role goes first.
+You may also swap roles by changing the value in the relevant
+\bibfield{editortype} field (see Table \ref{editors:table} in section
+\ref{editors:basics}). For compilers, expanders, revisers, and
+updaters, you need to put a value in \bibfield{editortype} anyway. You
+may as well pick a value that has the roles in the correct order.
+Either way, if you pick one that begins with \textit{trans}
+(\textit{transcomp}, \textit{transed}, \textit{transex},
+\textit{transrev}, or \textit{transup}), Windy City assumes that the
+translator's role goes first. Using \opt{swaptrans} would then put the
+editor's role first.
 
-On rare occasions, you may want to swap the position of an author and
-an editor or translator. \textit{CMOS} \ref{14.104} gives an example:
+As often happens, cross-referencing raises some complications. The
+problem is that \opt{swaptrans} applies to the editors and translators
+of a \bibfield{title}, but cross-referenced works have more than one
+(a \bibfield{title}, a cross-referenced \bibfield{title}, and maybe
+even a double cross-referenced \bibfield{title}). Three more entry
+options allow you to pick among them so as to swap whichever set of
+editors and translators you want. Here's a silly example to showcase
+all three options:
 
+\begin{verbatim}
+   @InCollection{doe2017,
+     author = {Doe, Jane},
+     title = {An Essay},
+     editor = {Smith, John},
+     translator = {Smith, John},
+     pages = {18–35},
+     crossref = {jones2017}
+   }
+   @InBook{jones2017,
+     title = {A Volume of Essays},
+     editor = {Smith, John},
+     translator = {Smith, John},
+     volume = {1},
+     crossref = {white2017}
+   }
+   @Collection{white2017,
+     title = {A Collection of Essays},
+     editor = {Smith, John},
+     translator = {Smith, John},
+     volumes = {3},
+     address = {Chicago},
+     publisher = {University of Chicago Press},
+     year = {2017}
+   }
+\end{verbatim}
+
+To swap the first set of editors and translators, use
+\opt{swaptrans:title}:
+
 \begin{citebib}
+\item \cite{doe2017a}
+\end{citebib}
+
+To swap the second set of editors and translators, use
+\opt{swaptrans:booktitle} (or \opt{swaptrans:book}):
+
+\begin{citebib}
+\item \cite{doe2017b}
+\end{citebib}
+
+To swap the third set of editors and translators, use
+\opt{swaptrans:bookbooktitle} (or \opt{swaptrans:bookbook}):
+
+\begin{citebib}
+\item \cite{doe2017c}
+\end{citebib}
+
+To swap editors and translators of an \bibfield{issuetitle},
+\bibfield{maintitle}, or \bibfield{series}, use
+\opt{swaptrans:issuetitle}, \opt{swaptrans:maintitle}, or
+\opt{swaptrans:series}, respectively. The first two also have short
+forms: \opt{swaptrans:issue} and \opt{swaptrans:main}.
+
+On rare occasions, you may want to swap positions of an author and an
+editor or translator. From \textit{CMOS} \ref{14.104}:
+
+\begin{citebib}
 \item \cite{pound1953}
 \end{citebib}
 
@@ -1514,13 +1892,13 @@
 \bibtype{collection}, \bibtype{inbook}, \bibtype{incollection},
 \bibtype{mvbook}, and \bibtype{mvcollection} entry types. But beware:
 Windy City doesn't look ahead to see if there's really an editor or
-translator to take the author's place. If it doesn't find one, it will
-still print the author's name after the title, leaving the author's
+translator to take the author's place. If it doesn't find one, it
+still prints the author's name after the title, leaving the author's
 position empty. Also, if it finds both an editor and a translator, and
-they're not the same person, it will print the editor's name in the
+they're not the same person, it prints the editor's name in the
 author's position---again, giving priority to editors. If you want the
 translator's name in the author's position, use \opt{swapauth} with
-\opt{swaptrans}.
+the appropriate \opt{swaptrans} option.
 
 For correct sorting in a bibliography, a work that uses \opt{swapauth}
 needs a field like \bibfield{sortname} to sort it by the name of the
@@ -1571,7 +1949,7 @@
 title of the collection. In standard notes and bibliographies,
 \textit{CMOS} gives you the option of reversing this order. (See
 especially \textit{CMOS} \ref{14.119}, \ref{14.121}, and \ref{14.122},
-and compare \ref{14.144} and \ref{15.41}.) Windy City does as well,
+and compare \ref{14.144} and \ref{15.41}.) Windy City does as well
 with the entry or preamble option \opt{swapvol}.
 
 \begin{citebib}
@@ -1689,7 +2067,7 @@
 
 \begin{citebib}
 \item \cite[56]{doe2018}
-\item \cite[128]{edwards2018}
+\item \cite[128]{adams2018}
 \nocite{jones2018}
 \end{citebib}
 
@@ -1699,7 +2077,7 @@
 \AtNextCitekey{\toggletrue{swapvol}}
 \item \cite[56]{doe2018}
 \AtNextCitekey{\toggletrue{swapvol}}
-\item \cite[128]{edwards2018}
+\item \cite[128]{adams2018}
 \AtNextBibliography{\toggletrue{swapvol}}
 \nocite{jones2018}
 \end{citebib}
@@ -2446,7 +2824,7 @@
 \label{14.104}
 
 On how to make an author and editor swap places, see section
-\ref{edtranspos}.
+\ref{editors:swap}.
 
 \begin{citebib}
 \item \cite{bonnefoy1995}
@@ -3571,6 +3949,7 @@
 in the preferred way, with the \opt{reflist} preamble option, should
 prevent those issues.\\}%
 
+\titleformat{\section}{\large\bfseries\filcenter}{}{2ex}{}
 \printbiblist[prenote=sh]{shorthand}
 \refstepcounter{sh}\label{sh}
 \printbibliography[notkeyword=notinbib,prenote=bib]

Modified: trunk/Master/texmf-dist/tex/latex/windycity/american-windycity.lbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/windycity/american-windycity.lbx	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/tex/latex/windycity/american-windycity.lbx	2021-05-03 21:12:04 UTC (rev 59067)
@@ -1,4 +1,4 @@
-% Last modified: Sat 30 Jan 2021 06:17:59 PM CST
+% Last modified: Sun 02 May 2021 01:14:34 PM CDT
 
 % Permission is granted to copy, distribute and/or modify this
 % software under the terms of the LaTeX Project Public License (LPPL),
@@ -11,7 +11,7 @@
 % implied warranties of merchantability and fitness for a particular
 % purpose.
 
-\ProvidesFile{american-windycity.lbx}[2021/01/30 Windy City
+\ProvidesFile{american-windycity.lbx}[2021/05/02 Windy City
   localization module for biblatex]
 \InheritBibliographyExtras{american}
 \InheritBibliographyStrings{american}
@@ -119,9 +119,10 @@
 }
 
 \NewBibliographyString{by}
-\NewBibliographyString{comped,comped+,compiler,compiler+,comprev,comprev+,comptrans,comptrans+,compup,compup+}
-\NewBibliographyString{editor+,edcomp,edcomp+,edrev,edrev+,edtrans,edtrans+,edup,edup+}
+\NewBibliographyString{comp,comp+,comped,comped+,compex,compex+,compiler,compiler+,comprev,comprev+,comptrans,comptrans+,compup,compup+}
+\NewBibliographyString{ed,ed+,editor+,edcomp,edcomp+,edex,edex+,edrev,edrev+,edtrans,edtrans+,edup,edup+}
 \NewBibliographyString{expanded}
+\NewBibliographyString{ex,ex+,excomp,excomp+,exed,exed+,expander,expander+,exrev,exrev+,extrans,extrans+,exup,exup+}
 \NewBibliographyString{noplace}
 \NewBibliographyString{of}
 \NewBibliographyString{origpub}
@@ -132,15 +133,14 @@
 \NewBibliographyString{pseudo}
 \NewBibliographyString{reprint,reprinted}
 \NewBibliographyString{review,reviewnoauth}
-\NewBibliographyString{revcomp,revcomp+,reved,reved+,reviser,reviser+,revtrans,revtrans+,revup,revup+}
+\NewBibliographyString{rev,rev+,revcomp,revcomp+,reved,reved+,revex,revex+,reviser,reviser+,revtrans,revtrans+,revup,revup+}
 \NewBibliographyString{revised}
 \NewBibliographyString{selfpub}
 \NewBibliographyString{special}
 \NewBibliographyString{subverbo,subverbos}
-\NewBibliographyString{transcomp,transcomp+,transed,transed+,translator+,transrev,transrev+,transup,transup+}
-\NewBibliographyString{upcomp,upcomp+,updater,updater+,uped,uped+,uprev,uprev+,uptrans,uptrans+}
+\NewBibliographyString{trans,trans+,transcomp,transcomp+,transed,transed+,transex,transex+,translator+,transrev,transrev+,transup,transup+}
+\NewBibliographyString{up,up+,upcomp,upcomp+,updater,updater+,uped,uped+,upex,upex+,uprev,uprev+,uptrans,uptrans+}
 \NewBibliographyString{updated}
-\NewBibliographyString{updater}
 \NewBibliographyString{working}
 
 \DeclareBibliographyStrings{%
@@ -151,8 +151,12 @@
   by            = {{by}{by}},
   chapter       = {{chap\adddot}{chap\adddot}},
   citedas       = {{hereafter cited as}{hereafter cited as}},
+  comp          = {{compiled by}{comp\adddot}},
+  comp+         = {{compiled by}{comps\adddot}},
   comped        = {{compiled and edit\-ed by}{comp\adddotspace and ed\adddot}},
   comped+       = {{compiled and edit\-ed by}{comps\adddotspace and eds\adddot}},
+  compex        = {{compiled and expanded by}{comp\adddotspace and exp\adddot}},
+  compex+       = {{compiled and expanded by}{comps\adddotspace and exp\adddot}},
   compiler      = {{compiled by}{comp\adddot}},
   compiler+     = {{compiled by}{comps\adddot}},
   comprev       = {{compiled and revised by}{comp\adddotspace and rev\adddot}},
@@ -161,8 +165,12 @@
   comptrans+    = {{compiled and translated by}{comps\adddotspace and trans\adddot}},
   compup        = {{compiled and updated by}{comp\adddotspace and up\adddot}},
   compup+       = {{compiled and updated by}{comps\adddotspace and up\adddot}},
+  ed            = {{edit\-ed by}{ed\adddot}},
+  ed+           = {{edit\-ed by}{eds\adddot}},
   edcomp        = {{edit\-ed and compiled by}{ed\adddotspace and comp\adddot}},
   edcomp+       = {{edit\-ed and compiled by}{eds\adddotspace and comps\adddot}},
+  edex          = {{edit\-ed and expanded by}{ed\adddotspace and exp\adddot}},
+  edex+         = {{edit\-ed and expanded by}{eds\adddotspace and exp\adddot}},
   edition       = {{ed\adddot}{ed\adddot}},
   editor        = {{edit\-ed by}{ed\adddot}},
   editor+       = {{edit\-ed by}{eds\adddot}},
@@ -172,7 +180,21 @@
   edtrans+      = {{edit\-ed and translated by}{eds\adddotspace and trans\adddot}},
   edup          = {{edit\-ed and updated by}{ed\adddotspace and up\adddot}},
   edup+         = {{edit\-ed and updated by}{eds\adddotspace and up\adddot}},
+  ex            = {{expanded by}{exp\adddot}},
+  ex+           = {{expanded by}{exp\adddot}},
+  excomp        = {{expanded and compiled by}{exp\adddotspace and comp\adddot}},
+  excomp+       = {{expanded and compiled by}{exp\adddotspace and comps\adddot}},
+  exed          = {{expanded and edit\-ed by}{exp\adddotspace and ed\adddot}},
+  exed+         = {{expanded and edit\-ed by}{exp\adddotspace and eds\adddot}},
   expanded      = {{expanded edition}{exp\adddotspace ed\adddot}},
+  expander      = {{expanded by}{exp\adddot}},
+  expander+     = {{expanded by}{exp\adddot}},
+  exrev         = {{expanded and revised by}{exp\adddotspace and rev\adddot}},
+  exrev+        = {{expanded and revised by}{exp\adddotspace and revs\adddot}},
+  extrans       = {{expanded and translated by}{exp\adddotspace and trans\adddot}},
+  extrans+      = {{expanded and translated by}{exp\adddotspace and trans\adddot}},
+  exup          = {{expanded and updated by}{exp\adddotspace and up\adddot}},
+  exup+         = {{expanded and updated by}{exp\adddotspace and up\adddot}},
   foreword      = {{foreword to}{foreword to}},
   forthcoming   = {{forthcoming}{forthcoming}},
   ibidem        = {{ibid\adddot}{ibid\adddot}},
@@ -195,8 +217,12 @@
   references    = {{Bibliography}{Bibliography}},
   reprint       = {{reprint}{repr\adddot}},
   reprinted     = {{reprinted in}{reprinted in}},
+  rev           = {{revised by}{rev\adddot}},
+  rev+          = {{revised by}{revs\adddot}},
   reved         = {{revised and edit\-ed by}{rev\adddotspace and ed\adddot}},
   reved+        = {{revised and edit\-ed by}{revs\adddotspace and eds\adddot}},
+  revex         = {{revised and expanded by}{rev\adddotspace and exp\adddot}},
+  revex+        = {{revised and expanded by}{revs\adddotspace and exp\adddot}},
   revcomp       = {{revised and compiled by}{rev\adddotspace and comp\adddot}},
   revcomp+      = {{revised and compiled by}{revs\adddotspace and comps\adddot}},
   review        = {{review of}{review of}},
@@ -212,10 +238,14 @@
   special       = {{special issue}{special issue}},
   subverbo      = {{s\adddot v\adddot}{s\adddot v\adddot}},
   subverbos     = {{s\adddot vv\adddot}{s\adddot vv\adddot}},
+  trans         = {{translated by}{trans\adddot}},
+  trans+        = {{translated by}{trans\adddot}},
   transcomp     = {{translated and compiled by}{trans\adddotspace and comp\adddot}},
   transcomp+    = {{translated and compiled by}{trans\adddotspace and comps\adddot}},
   transed       = {{translated and edit\-ed by}{trans\adddotspace and ed\adddot}},
   transed+      = {{translated and edit\-ed by}{trans\adddotspace and eds\adddot}},
+  transex       = {{translated and expanded by}{trans\adddotspace and exp\adddot}},
+  transex+      = {{translated and expanded by}{trans\adddotspace and exp\adddot}},
   translator    = {{translated by}{trans\adddot}},
   translator+   = {{translated by}{trans\adddot}},
   transrev      = {{translated and revised by}{trans\adddotspace and rev\adddot}},
@@ -222,6 +252,8 @@
   transrev+     = {{translated and revised by}{trans\adddotspace and revs\adddot}},
   transup       = {{translated and updated by}{trans\adddotspace and up\adddot}},
   transup+      = {{translated and updated by}{trans\adddotspace and up\adddot}},
+  up            = {{updated by}{up\adddot}},
+  up+           = {{updated by}{up\adddot}},
   upcomp        = {{updated and compiled by}{up\adddotspace and comp\adddot}},
   upcomp+       = {{updated and compiled by}{up\adddotspace and comps\adddot}},
   updated       = {{updated edition}{up\adddotspace ed\adddot}},
@@ -229,6 +261,8 @@
   updater+      = {{updated by}{up\adddot}},
   uped          = {{updated and edit\-ed by}{up\adddotspace and ed\adddot}},
   uped+         = {{updated and edit\-ed by}{up\adddotspace and eds\adddot}},
+  upex          = {{updated and expanded by}{up\adddotspace and exp\adddot}},
+  upex+         = {{updated and expanded by}{up\adddotspace and exp\adddot}},
   uprev         = {{updated and revised by}{up\adddotspace and rev\adddot}},
   uprev+        = {{updated and revised by}{up\adddotspace and revs\adddot}},
   uptrans       = {{updated and translated by}{up\adddotspace and trans\adddot}},

Modified: trunk/Master/texmf-dist/tex/latex/windycity/windycity.bbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/windycity/windycity.bbx	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/tex/latex/windycity/windycity.bbx	2021-05-03 21:12:04 UTC (rev 59067)
@@ -1,4 +1,4 @@
-% Last modified: Sat 30 Jan 2021 06:17:53 PM CST
+% Last modified: Sun 02 May 2021 01:14:55 PM CDT
 
 % Permission is granted to copy, distribute and/or modify this
 % software under the terms of the LaTeX Project Public License (LPPL),
@@ -11,7 +11,7 @@
 % implied warranties of merchantability and fitness for a particular
 % purpose.
 
-\ProvidesFile{windycity.bbx}[2021/01/30 Windy City bibliography style
+\ProvidesFile{windycity.bbx}[2021/05/02 Windy City bibliography style
   for biblatex]
 \@ifpackagelater{biblatex}{2019/08/17}
   {}
@@ -68,14 +68,14 @@
 \DeclareBiblatexOption{entry}[boolean]{listvols}[true]{%
   \settoggle{listvols}{#1}}%
 
+\providetoggle{newauth}
+\DeclareBiblatexOption{entry}[boolean]{newauth}[true]{%
+  \settoggle{newauth}{#1}}%
+
 \providetoggle{noauth}
 \DeclareBiblatexOption{entry}[boolean]{noauth}[true]{%
   \settoggle{noauth}{#1}}%
 
-\providetoggle{noreprint}
-\DeclareBiblatexOption{entry}[boolean]{noreprint}[true]{%
-  \settoggle{noreprint}{#1}}%
-
 \DeclareBiblatexOption{global}[boolean]{nolos}[true]{%
   \ifstrequal{#1}{true}
     {\AtBeginBibliography{\blx at key@bibcheck{nolos}}}
@@ -85,6 +85,10 @@
 \DeclareBiblatexOption{global}[boolean]{nopages}[true]{%
   \settoggle{nopages}{#1}}%
 
+\providetoggle{noreprint}
+\DeclareBiblatexOption{entry}[boolean]{noreprint}[true]{%
+  \settoggle{noreprint}{#1}}%
+
 \providetoggle{reflist}
 \DeclareBiblatexOption{global}[boolean]{reflist}[true]{%
   \ifstrequal{#1}{true}
@@ -106,6 +110,9 @@
      \toggletrue{shortfirst}}%
     {\togglefalse{short}}}
 
+\DeclareBiblatexOption{global}[boolean]{shortafter}[true]{%
+  \settoggle{short}{#1}}%
+
 \providetoggle{shortfirst}
 \DeclareBiblatexOption{global}[boolean]{shortfirst}[true]{%
   \settoggle{shortfirst}{#1}}%
@@ -122,13 +129,38 @@
 \DeclareBiblatexOption{entry}[boolean]{swapauth}[true]{%
   \settoggle{swapauth}{#1}}%
 
-\providetoggle{newauth}
-\DeclareBiblatexOption{entry}[boolean]{newauth}[true]{%
-  \settoggle{newauth}{#1}}%
-
 \providetoggle{swaptrans}
+\providetoggle{swaptrans:booktitle}
+\providetoggle{swaptrans:bookbooktitle}
+\providetoggle{swaptrans:issuetitle}
+\providetoggle{swaptrans:maintitle}
+\providetoggle{swaptrans:series}
+\providetoggle{swaptrans:title}
 \DeclareBiblatexOption{entry}[boolean]{swaptrans}[true]{%
-  \settoggle{swaptrans}{#1}}%
+  \settoggle{swaptrans:title}{#1}%
+  \settoggle{swaptrans:booktitle}{#1}%
+  \settoggle{swaptrans:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:booktitle}[true]{%
+  \settoggle{swaptrans:booktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:bookbooktitle}[true]{%
+  \settoggle{swaptrans:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:issuetitle}[true]{%
+  \settoggle{swaptrans:issuetitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:maintitle}[true]{%
+  \settoggle{swaptrans:maintitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:series}[true]{%
+  \settoggle{swaptrans:series}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:title}[true]{%
+  \settoggle{swaptrans:title}{#1}}%
+% Short forms of the options above:
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:book}[true]{%
+  \settoggle{swaptrans:booktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:bookbook}[true]{%
+  \settoggle{swaptrans:bookbooktitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:issue}[true]{%
+  \settoggle{swaptrans:issuetitle}{#1}}%
+\DeclareBiblatexOption{entry}[boolean]{swaptrans:main}[true]{%
+  \settoggle{swaptrans:maintitle}{#1}}%
 
 \providetoggle{swapvol}
 \DeclareBiblatexOption{entry,global}[boolean]{swapvol}[true]{%
@@ -161,9 +193,6 @@
   maxbibnames=10,
   mincitenames=1,
   maxcitenames=3,
-% Remember, if 'mincrossrefs' is greater than 1, and you cite just one
-% entrykey in a document (or refsection, etc), the field 'crossref' is
-% undefined.
   mincrossrefs=2,
   minxrefs=2,
   pagetracker=page,
@@ -180,12 +209,7 @@
   useprefix=false,
   usetranslator=true}
 
-% If a document's language is English, set by babel or polyglossia or
-% by biblatex when neither babel nor polyglossia has been loaded, use
-% 'american-windycity.lbx':
 \DeclareLanguageMapping{english}{american-windycity}
-% If the document's language isn't English, try to override
-% 'american-windycity.lbx' with '<language>-windycity.lbx':
 \DeclareLanguageMappingSuffix{-windycity}
 
 \DeclareLabeldate{% 'reflist' preamble option loads an alternative
@@ -278,10 +302,10 @@
     \field{volume}
     \literal{0}}}
 
-% Mapping for when 'journal', 'journaltitle', 'organization', or
-% 'blogtitle' goes in the author's position.
+% When 'journal', 'journaltitle', 'organization', or 'blogtitle' goes
+% in the author's position.
 
-\DeclareSourcemap{
+\DeclareStyleSourcemap{
   \maps[datatype=bibtex]{
     \map[overwrite]{
       \pertype{article}
@@ -310,7 +334,7 @@
     }
   }
 }
-\DeclareSourcemap{
+\DeclareStyleSourcemap{
   \maps[datatype=bibtex]{
     \map[overwrite]{
       \pertype{online}
@@ -337,7 +361,7 @@
     }
   }
 }
-\DeclareSourcemap{
+\DeclareStyleSourcemap{
   \maps[datatype=bibtex]{
     \map[overwrite=false]{
       \pertype{inreference}
@@ -359,6 +383,29 @@
   }
 }
 
+% Save the entry key of every editor, translator, and title.
+
+\DeclareStyleSourcemap{
+  \maps[datatype=bibtex]{
+    \map[overwrite, foreach={title,booktitle,bookbooktitle}]{
+      \step[fieldsource=entrykey]
+      \step[fieldset=$MAPLOOPkey, origfieldval]
+      \step[notfield=$MAPLOOP, final]
+      \step[fieldset=$MAPLOOPkey, null]
+    }
+    \map[overwrite, foreach={%
+        editor,editora,editorb,editorc,translator,translatora,translatorb}]{
+      \step[fieldsource=entrykey]
+      \step[fieldset=$MAPLOOPtype, fieldvalue={,}, appendstrict]
+      \step[fieldset=$MAPLOOPtype, origfieldval, append]
+      \step[notfield=$MAPLOOP, final]
+      \step[fieldset=$MAPLOOPtype, null]
+    }
+  }
+}
+
+% For 'collsonly' and 'nolos' options and the 'reference' entry type.
+
 \defbibcheck{collsonly}{%
   \ifentrytype{inbook}
     {\iffieldundef{crossref}
@@ -389,18 +436,22 @@
 \ResetDataInheritance
 \DefaultInheritance[\except{*}{review}{all=false}]{all=true,override=false}
 \DeclareDataInheritance{*}{incollection,inbook,letter,review}{%
+  \inherit[override=true]{titlekey}{booktitlekey}
+  \inherit[override=true]{booktitlekey}{bookbooktitlekey}
   \inherit{author}{bookauthor}
   \inherit{authortype}{bookauthortype}
   \inherit{shortauthor}{shortbookauthor}
-  \inherit{editor}{editora}
-  \inherit{editora}{editorb}
-  \inherit{editorb}{editorc}
-  \inherit{editortype}{editoratype}
-  \inherit{editoratype}{editorbtype}
-  \inherit{editorbtype}{editorctype}
+  \inherit[override=true]{editor}{editora}
+  \inherit[override=true]{editora}{editorb}
+  \inherit[override=true]{editorb}{editorc}
+  \inherit[override=true]{editortype}{editoratype}
+  \inherit[override=true]{editoratype}{editorbtype}
+  \inherit[override=true]{editorbtype}{editorctype}
+  \inherit{editoraddon}{editoraaddon}
   \inherit{translator}{translatora}
   \inherit{translatora}{translatorb}
-  \inherit{translatortype}{translatoratype}
+  \inherit[override=true]{translatortype}{translatoratype}
+  \inherit[override=true]{translatoratype}{translatorbtype}
   \inherit{title}{booktitle}
   \inherit{subtitle}{booksubtitle}
   \inherit{titleaddon}{booktitleaddon}
@@ -442,12 +493,16 @@
 \let\crossreflist\empty
 \let\pluga\empty
 \let\plugb\empty
-\let\xeditor\empty
-\let\yeditor\empty
 \let\xtitle\empty
 \let\xvolume\empty
 
+\let\xeditor\empty
+\let\yeditor\empty
+\let\edtypes\empty
+\let\transtypes\empty
+
 \providetoggle{authposition}
+\providetoggle{atleastone}
 \providetoggle{bibliography}
 \providetoggle{ibid:loccit}
 \providetoggle{multicite}
@@ -496,8 +551,6 @@
    \global\togglefalse{reflist}}%
   {\item}
 
-% Index names only.
-
 \renewbibmacro*{bibindex}{%
   \ifbibindex
     {\indexnames{labelname}}%
@@ -536,8 +589,8 @@
 \DeclareIndexNameAlias{translator}{default}
 
 % Affixes like 'Jr.', should appear last, delimited with a comma, when
-% inverted, as in a bibliography, but not otherwise, as in a note. See
-% CMOS, 17th ed., 6.43 and 16.41, as well as the example in 14.75.
+% the name is inverted. See CMOS, 17th ed., 6.43 and 16.41, and the
+% example in 14.75.
 
 \renewbibmacro*{name:family-given}[4]{%
   \ifuseprefix
@@ -705,14 +758,18 @@
     \step[typesource=www,            typetarget=online]
     \step[typesource=inreference,    typetarget=reference]
     \step[typesource=mathesis,       typetarget=thesis]
-    \step[typesource=phdthesis,      typetarget=thesis]}
+    \step[typesource=phdthesis,      typetarget=thesis]
+  }
   \map{
     \step[fieldsource=school,        fieldtarget=institution]
     \step[fieldsource=address,       fieldtarget=location]
-    \step[fieldsource=journal,       fieldtarget=journaltitle]}}
+    \step[fieldsource=journal,       fieldtarget=journaltitle]
+  }
+}
 
 \DeclareBibliographyAlias{collection}{book}
 \DeclareBibliographyAlias{cite:collection}{cite:book}
+\DeclareBibliographyAlias{*}{book}
 
 \DeclareBibliographyAlias{inbook}{incollection}
 \DeclareBibliographyAlias{letter}{incollection}
@@ -722,8 +779,6 @@
 \DeclareBibliographyAlias{unpublished}{thesis}
 \DeclareBibliographyAlias{cite:unpublished}{cite:thesis}
 
-\DeclareBibliographyAlias{*}{book}
-
 %%%%%%%%%%%%%%%%%%%%%%%%%
 %%  Author's Position  %%
 %%%%%%%%%%%%%%%%%%%%%%%%%
@@ -738,11 +793,11 @@
     {\usebibmacro{authpos+deflabel}}%
     {\usebibmacro{author+bookauthor}%
      \ifnameundef{\cbx at namelist}
-       {\usebibmacro{edtrans:authpos}%
+       {\usebibmacro{editors:a}%
         \ifnameundef{\cbx at namelist}
           {\toggletrue{noauth}%
            \usebibmacro{authpos+deflabel}}%
-          {\usebibmacro{addplus:authpos}%
+          {\usebibmacro{addplus+etc}%
            \usebibmacro{namehash+etc}}}
        {\usebibmacro{namehash+etc}}}}
 
@@ -824,246 +879,164 @@
 
 % For editors and translators in the author's position.
 
-\newbibmacro*{edtrans:authpos}{%
-  \togglefalse{noed}%
-  \togglefalse{notrans}%
-  \usebibmacro{test:ed:authpos}%
-  \usebibmacro{test:trans:authpos}%
-  \ifboolexpr{ togl {noed}
-               and togl {notrans}}
-    {}
-    {\iftoggle{noed}
-       {\usebibmacro{transcombos}}%
-       {\iftoggle{notrans}
-          {\usebibmacro{edcombos}}%
-          {\iftoggle{swaptrans}
-             {\usebibmacro{transcombos}}%
-             {\usebibmacro{edcombos}}}}}}
+\newbibmacro*{editors:a}{%
+  \usebibmacro{test:ed:a}%
+  \usebibmacro{test:trans:a}%
+  \iftoggle{swapvol}
+    {\ifboolexpr{ test {\ifinlist{maintitle}{\edtypes}}
+                  or test {\ifinlist{maintitle}{\transtypes}}}
+       {\usebibmacro{test:swaptrans:a}{maintitle}}%
+       {\usebibmacro{test:swaptrans:a}{booktitle}}}
+    {\usebibmacro{test:swaptrans:a}{title}}}
 
-\newbibmacro*{test:ed:authpos}{%
-  \ifboolexpr{ test {\ifnameundef{editor}}
-               and test {\ifnameundef{editora}}}
-    {\toggletrue{noed}}%
-    {\ifnameundef{editor}
-       {\usebibmacro{test:editora:authpos}}%
-       {\usebibmacro{test:editor:authpos}%
-        \iftoggle{noed}
-          {\global\togglefalse{noed}%
-           \usebibmacro{test:editora:authpos}}%
-          {}}}}
+\newbibmacro*{test:ed:a}{%
+  \renewcommand*{\do}[1]{%
+    \ifnameundef{##1}
+      {\toggletrue{noed}}%
+      {\togglefalse{noed}%
+       \renewcommand*{\xeditor}{##1}%
+       \let\edtypes\empty
+       \forcsvfield{\listadd\edtypes}{\xeditor type}%
+       \usebibmacro{test:a:types}{\edtypes}{noed}}}% needs '%'
+  \docsvlist{editor,editora,editorb,editorc}}%
 
-\newbibmacro*{test:xeditor:a}[1]{%
-  \ifboolexpr{ test {\ifnameundef{\xeditor}}
-               or test {\iffieldequalstr{\xeditor type}{issuetitle}}
-               or test {\iffieldequalstr{\xeditor type}{series}}}
-    {\toggletrue{noed}}%
-    {\ifstrequal{#1}{ap}% not 'authposition' toggle
-       {\usebibmacro{test:xeditor:b:authpos}}%
-       {\usebibmacro{test:xeditor:b}}}}
+\newbibmacro*{test:trans:a}{%
+  \renewcommand*{\do}[1]{%
+    \ifnameundef{##1}
+      {\toggletrue{notrans}}%
+      {\togglefalse{notrans}%
+       \renewcommand*{\yeditor}{##1}%
+       \let\transtypes\empty
+       \forcsvfield{\listadd\transtypes}{\yeditor type}%
+       \usebibmacro{test:a:types}{\transtypes}{notrans}}}% needs '%'
+  \docsvlist{translator,translatora,translatorb}}%
 
-\newbibmacro*{test:xeditor:b:authpos}{%
-  \iffieldequalstr{\xeditor type}{maintitle}
-    {\iftoggle{collection:bk}
-       {\iftoggle{swapvol}
-          {}
-          {\toggletrue{noed}}}
-       {\toggletrue{noed}}}
-    {\ifboolexpr{ togl {collection:bk}
-                  and togl {swapvol}}
-       {\toggletrue{noed}}%
-       {\ifboolexpr{ togl {collection:icbk}
-                     or togl {collection:icib}}
-          {\ifnameundef{translator}
-             {}
-             {\toggletrue{noed}}}
-          {}}}}
+\newbibmacro*{test:a:types}[2]{%
+  \ifboolexpr{ test {\ifinlist{issuetitle}{#1}}
+               or test {\ifinlist{series}{#1}}}
+    {\toggletrue{#2}}%
+    {\ifinlist{maintitle}{#1}
+       {\iftoggle{collection:bk}
+          {\iftoggle{swapvol}
+             {\listbreak}%
+             {\toggletrue{#2}}}
+          {\toggletrue{#2}}}
+       {\ifboolexpr{ togl {collection:bk}
+                     and togl {swapvol}}
+          {\toggletrue{#2}}%
+          {\usebibmacro{test:a:keys}{#1}{#2}}}}}
 
-\newbibmacro*{test:editor:authpos}{%
-  \renewcommand*{\xeditor}{editor}%
-  \usebibmacro{test:xeditor:a}{ap}%
-  \iftoggle{noed}
-    {}
+\newbibmacro*{test:a:keys}[2]{%
+  \xifinlist{\thefield{\xtitle titlekey}}{#1}
     {\ifboolexpr{ togl {collection:ib}
-                  and togl {swapvol}
-                  and not test {\ifnameundef{editora}}}
-       {\toggletrue{noed}}%
+                  and togl {swapvol}}
+       {\toggletrue{#2}}%
        {\ifboolexpr{ togl {swapvol}
                      and ( togl {collection:icbk}
                      or togl {collection:icib} )}
-          {\toggletrue{noed}}%
-          {}}}}
+          {\toggletrue{#2}}%
+          {\listbreak}}}
+    {\listbreak}}%
 
-\newbibmacro*{test:editora:authpos}{%
-  \renewcommand*{\xeditor}{editora}%
-  \usebibmacro{test:xeditor:a}{ap}%
+\newbibmacro*{test:swaptrans:a}[1]{%
+  \iftoggle{swaptrans:#1}
+    {\toggletrue{swaptrans}%
+     \iftoggle{notrans}
+       {\usebibmacro{ed:a:combos}}%
+       {\usebibmacro{trans:a:combos}}%
+     \togglefalse{swaptrans}}%
+    {\iftoggle{noed}
+       {\usebibmacro{trans:a:combos}}%
+       {\usebibmacro{ed:a:combos}}}}
+
+\newbibmacro*{ed:a:combos}{%
   \iftoggle{noed}
     {}
-    {\ifboolexpr{ togl {collection:ib}
-                  and not togl {swapvol}
-                  and test {\ifnameundef{editor}}}
-       {\toggletrue{noed}}%
-       {}}}
+    {\usebibmacro{edcombos:a}}}
 
-\newbibmacro*{test:trans:authpos}{%
-  \usebibmacro{trans+transa+transb}%
-  \ifnameundef{\yeditor}
-    {\toggletrue{notrans}}%
-    {\iffieldequalstr{translatortype}{maintitle}
-       {\ifboolexpr{ togl {collection:bk}
-                     and togl {swapvol}}
-          {}
-          {\toggletrue{notrans}}}
-       {\iffieldequalstr{translatoratype}{maintitle}
-          {\ifboolexpr{ togl {collection:icbk}
-                        and togl {swapvol}}
-             {}
-             {\toggletrue{notrans}}}
-          {}}}}
+\newbibmacro*{trans:a:combos}{%
+  \iftoggle{notrans}
+    {}
+    {\usebibmacro{transcombos:a}}}
 
-\newbibmacro*{trans+transa+transb}{%
-  \ifnameundef{translator}
-    {\ifnameundef{translatora}
-       {\renewcommand*{\yeditor}{translatorb}}%
-       {\renewcommand*{\yeditor}{translatora}}}
-    {\renewcommand*{\yeditor}{translator}}}
+% For editors and translators after the author's position.
 
-\newbibmacro*{transcombos}{%
-  \renewcommand*{\cbx at namelist}{\yeditor}%
-  \ifnamesequal{\xeditor}{\yeditor}
-    {\clearname{\xeditor}%
-     \ifboolexpr{ test {\iffieldstart{editortype}{c}}
-                  or test {\iffieldequalstr{\xeditor type}{transcomp}}}
-       {\renewcommand*{\cbx at bibstring}{transcomp}}%
-       {\ifboolexpr{ test {\iffieldstart{\xeditor type}{r}}
-                     or test {\iffieldequalstr{\xeditor type}{transrev}}}
-          {\renewcommand*{\cbx at bibstring}{transrev}}%
-          {\ifboolexpr{ test {\iffieldstart{\xeditor type}{u}}
-                        or test {\iffieldequalstr{\xeditor type}{transup}}}
-             {\renewcommand*{\cbx at bibstring}{transup}}%
-             {\renewcommand*{\cbx at bibstring}{transed}}}}}
-    {\renewcommand*{\cbx at bibstring}{translator}}}
+\newbibmacro*{editors:b}{%
+  \usebibmacro{test:ed:b}%
+  \usebibmacro{test:trans:b}%
+  \ifdefstring{\xtitle}{book}
+    {\usebibmacro{test:swaptrans:b}{booktitle}}%
+    {\ifdefstring{\xtitle}{bookbook}
+       {\usebibmacro{test:swaptrans:b}{bookbooktitle}}%
+       {\usebibmacro{test:swaptrans:b}{title}}}}
 
-\newbibmacro*{edcombos}{%
-  \renewcommand*{\cbx at namelist}{\xeditor}%
-  \ifnamesequal{\xeditor}{\yeditor}
-    {\clearname{\yeditor}%
-     \usebibmacro{edcombos:trans}}%
-    {\usebibmacro{edcombos:notrans}}}
+\newbibmacro*{test:ed:b}{%
+  \renewcommand*{\do}[1]{%
+    \ifnameundef{##1}
+      {\toggletrue{noed}}%
+      {\togglefalse{noed}%
+       \renewcommand*{\xeditor}{##1}%
+       \let\edtypes\empty
+       \forcsvfield{\listadd\edtypes}{\xeditor type}%
+       \usebibmacro{test:b:types}{\edtypes}{noed}}}% needs '%'
+  \docsvlist{editor,editora,editorb,editorc}}%
 
-\newbibmacro*{edcombos:trans}{%
-  \iffieldstart{\xeditor type}{c}
-    {\renewcommand*{\cbx at bibstring}{comptrans}}%
-    {\iffieldstart{\xeditor type}{r}
-       {\renewcommand*{\cbx at bibstring}{revtrans}}%
-       {\iffieldstart{\xeditor type}{u}
-          {\renewcommand*{\cbx at bibstring}{uptrans}}%
-          {\iffieldequalstr{\xeditor type}{transcomp}
-             {\renewcommand*{\cbx at bibstring}{transcomp}}%
-             {\iffieldequalstr{\xeditor type}{transed}
-                {\renewcommand*{\cbx at bibstring}{transed}}%
-                {\iffieldequalstr{\xeditor type}{transrev}
-                   {\renewcommand*{\cbx at bibstring}{transrev}}%
-                   {\iffieldequalstr{\xeditor type}{transup}
-                      {\renewcommand*{\cbx at bibstring}{transup}}%
-                      {\renewcommand*{\cbx at bibstring}{edtrans}}}}}}}}}
+\newbibmacro*{test:trans:b}{%
+  \renewcommand*{\do}[1]{%
+    \ifnameundef{##1}
+      {\toggletrue{notrans}}%
+      {\togglefalse{notrans}%
+       \renewcommand*{\yeditor}{##1}%
+       \let\transtypes\empty
+       \forcsvfield{\listadd\transtypes}{\yeditor type}%
+       \usebibmacro{test:b:types}{\transtypes}{notrans}}}% needs '%'
+  \docsvlist{translator,translatora,translatorb}}%
 
-\newbibmacro*{edcombos:notrans}{%
-  \iffieldequalstr{\xeditor type}{compiler}
-    {\renewcommand*{\cbx at bibstring}{compiler}}%
-    {\iffieldequalstr{\xeditor type}{reviser}
-       {\renewcommand*{\cbx at bibstring}{reviser}}%
-       {\iffieldequalstr{\xeditor type}{updater}
-          {\renewcommand*{\cbx at bibstring}{updater}}%
-          {\iffieldequalstr{\xeditor type}{comped}
-             {\renewcommand*{\cbx at bibstring}{comped}}%
-             {\iffieldequalstr{\xeditor type}{comprev}
-                {\renewcommand*{\cbx at bibstring}{comprev}}%
-                {\iffieldequalstr{\xeditor type}{compup}
-                   {\renewcommand*{\cbx at bibstring}{compup}}%
-                   {\iffieldequalstr{\xeditor type}{edcomp}
-                      {\renewcommand*{\cbx at bibstring}{edcomp}}%
-                      {\iffieldequalstr{\xeditor type}{edrev}
-                         {\renewcommand*{\cbx at bibstring}{edrev}}%
-                         {\iffieldequalstr{\xeditor type}{edup}
-                            {\renewcommand*{\cbx at bibstring}{edup}}%
-                            {\iffieldequalstr{\xeditor type}{revcomp}
-                               {\renewcommand*{\cbx at bibstring}{revcomp}}%
-                               {\iffieldequalstr{\xeditor type}{reved}
-                                  {\renewcommand*{\cbx at bibstring}{reved}}%
-                                  {\iffieldequalstr{\xeditor type}{revup}
-                                     {\renewcommand*{\cbx at bibstring}{revup}}%
-                                     {\iffieldequalstr{\xeditor type}{upcomp}
-                                        {\renewcommand*{\cbx at bibstring}{upcomp}}%
-                                        {\iffieldequalstr{\xeditor type}{uped}
-                                           {\renewcommand*{\cbx at bibstring}{uped}}%
-                                           {\iffieldequalstr{\xeditor type}{uprev}
-                                              {\renewcommand*{\cbx at bibstring}{uprev}}%
-                                              {\renewcommand*{\cbx at bibstring}{editor}}}}}}}}}}}}}}}}}
+\newbibmacro*{test:b:types}[2]{%
+  \ifboolexpr{ test {\ifinlist{issuetitle}{#1}}
+               or test {\ifinlist{maintitle}{#1}}
+               or test {\ifinlist{series}{#1}}}
+    {\toggletrue{#2}}%
+    {\ifinlist{booktitle}{#1}
+       {\ifdefstring{\xtitle}{book}
+          {\usebibmacro{test:b:keys}{#1}{#2}}%
+          {\toggletrue{#2}}}
+       {\ifinlist{bookbooktitle}{#1}
+          {\ifdefstring{\xtitle}{bookbook}
+             {\usebibmacro{test:b:keys}{#1}{#2}}%
+             {\toggletrue{#2}}}
+          {\usebibmacro{test:b:keys}{#1}{#2}}}}}
 
-% Thanks to David Fussner's biblatex-chicago for pointing me to this
-% command by Philipp Lehman. Source:
-% https://groups.google.com/forum/#!topic/comp.text.tex/kG003fkZK1I
+\newbibmacro*{test:b:keys}[2]{%
+  \xifinlist{\thefield{\xtitle titlekey}}{#1}
+    {\listbreak}%
+    {\toggletrue{#2}}}
 
-\newrobustcmd*{\iffieldstart}[2]{%
-  \iffieldundef{#1}
-    {\@secondoftwo}% originally '\@gobbletwo'
-    {\begingroup
-     \edef\@tempa{%
-       \long\def\noexpand\iffieldstart at i####1\detokenize{#2}####2}%
-     \@tempa\@nil{\endgroup\ifblank{##1}}%
-     \savefield*{#1}{\@tempa}%
-     \expandafter\iffieldstart at i\detokenize
-     \expandafter\expandafter\expandafter{%
-       \expandafter\@tempa\detokenize{#2}}\@nil}}%
+\newbibmacro*{test:swaptrans:b}[1]{%
+  \iftoggle{swaptrans:#1}
+    {\toggletrue{swaptrans}%
+     \usebibmacro{trans:b:combos}%
+     \usebibmacro{ed:b:combos}%
+     \togglefalse{swaptrans}}%
+    {\usebibmacro{ed:b:combos}%
+     \usebibmacro{trans:b:combos}}}
 
-\newbibmacro*{addplus:authpos}{%
-  \iftoggle{cbx:short}
-    {}
-    {\usebibmacro{addplus}%
-     \renewcommand*{\plugb}{%
-       \addcomma\space\bibsstring{\cbx at bibstring}}}}
+\newbibmacro*{ed:b:combos}{%
+  \iftoggle{noed}
+    {\usebibmacro{ed:b:second}}%
+    {\usebibmacro{edcombos:a}%
+     \usebibmacro{pluga+etc}%
+     \usebibmacro{editoraddon}{editor}%
+     \usebibmacro{editoraddon}{editora}%
+     \usebibmacro{ed:b:second}%
+     \usebibmacro{editoraddon}{editora}}}
 
-\newbibmacro*{addplus}{%
-  \ifnameundef{\xeditor}
-    {\ifnameundef{\yeditor}
-       {}
-       {\ifnumgreater{\value{\yeditor}}{1}
-          {\edef\cbx at bibstring{\cbx at bibstring +}}%
-          {}}}
-    {\ifnumgreater{\value{\xeditor}}{1}
-       {\edef\cbx at bibstring{\cbx at bibstring +}}%
-       {}}}
-
-% For editors and translators not in the author's position.
-
-\newbibmacro*{edtrans}{%
-  \iftoggle{swaptrans}
-    {\usebibmacro{transcombos+etc}%
-     \usebibmacro{edcombos+etc}}%
-    {\usebibmacro{edcombos+etc}%
-     \usebibmacro{transcombos+etc}}%
-  \usebibmacro{editoraddon}}%
-
-\newbibmacro*{transcombos+etc}{%
-  \togglefalse{noed}%
-  \togglefalse{notrans}%
-  \usebibmacro{test:ed}%
-  \usebibmacro{test:trans}%
+\newbibmacro*{trans:b:combos}{%
   \iftoggle{notrans}
     {}
-    {\usebibmacro{transcombos}%
+    {\usebibmacro{transcombos:a}%
      \usebibmacro{pluga+etc}}}
 
-\newbibmacro*{edcombos+etc}{%
-  \togglefalse{noed}%
-  \togglefalse{notrans}%
-  \usebibmacro{test:ed}%
-  \usebibmacro{test:trans}%
-  \iftoggle{noed}
-    {}
-    {\usebibmacro{edcombos}%
-     \usebibmacro{pluga+etc}}}
-
 \newbibmacro*{pluga+etc}{%
   \usebibmacro{edtranspunct:a}%
   \usebibmacro{pluga+printnames}%
@@ -1086,141 +1059,64 @@
     {\setunit{\addcomma\space}}%
     {\newunit}}%
 
-% Tests for 'edtrans' macro.
-
-\newbibmacro*{test:ed}{%
-  \iftoggle{edshift}
-    {\usebibmacro{eda+edb+edc}}%
-    {\ifnameundef{editor}
-       {\usebibmacro{test:editora}}%
-       {\usebibmacro{test:editor}%
-        \iftoggle{noed}
-          {\togglefalse{noed}%
-           \usebibmacro{test:editora}}%
-          {}}}}
-
-\newbibmacro*{eda+edb+edc}{%
-  \ifnameundef{editor}
-    {\ifnameundef{editora}
-       {\ifnameundef{editorb}
-          {\renewcommand*{\xeditor}{editorc}}%
-          {\renewcommand*{\xeditor}{editorb}}%
-        \usebibmacro{test:editorb}}%
-       {\usebibmacro{test:editora}%
-        \iftoggle{noed}
-          {\togglefalse{noed}%
-           \renewcommand*{\xeditor}{editorb}%
-           \usebibmacro{test:editorb}}%
-          {}}}
-    {\usebibmacro{test:editor}%
-     \iftoggle{noed}
-       {\togglefalse{noed}%
-        \usebibmacro{test:editora}}%
-       {}}}
-
-\newbibmacro*{test:editor}{%
-  \renewcommand*{\xeditor}{editor}%
-  \usebibmacro{test:xeditor:a}{}%
+\newbibmacro*{ed:b:second}{%
+  \usebibmacro{test:ed:b}%
   \iftoggle{noed}
     {}
-    {\ifdefstring{\xtitle}{book}
-       {\toggletrue{noed}}%
-       {}}}
+    {\usebibmacro{edcombos:a}%
+     \usebibmacro{pluga+etc}}}
 
-\newbibmacro*{test:editora}{%
-  \renewcommand*{\xeditor}{editora}%
-  \usebibmacro{test:xeditor:a}{}%
-  \iftoggle{noed}
-    {}
-    {\ifboolexpr{ test {\ifdefempty{\xtitle}}
-                  and ( togl {collection:ib}
-                  or togl {collection:icbk}
-                  or togl {collection:icib}
-                  or not togl {collection} )}
-       {\toggletrue{noed}}%
-       {\ifboolexpr{ test {\ifdefstring{\xtitle}{bookbook}}
-                     and togl {swapvol}
-                     and ( togl {collection:icib}
-                     or togl {collection:icbk} )}
-          {\toggletrue{noed}}%
-          {}}}}
+% For editors and translators of an 'issuetitle', 'maintitle', or 'series'.
 
-\newbibmacro*{test:editorb}{%
-  \usebibmacro{test:xeditor:a}{}%
-  \iftoggle{collection:icib}
-    {\ifdefstring{\xtitle}{book}
-       {\toggletrue{noed}}%
-       {}}
-    {}}
+\newbibmacro*{editors:c}[1]{%
+  \usebibmacro{test:ed:c}{#1}%
+  \usebibmacro{test:trans:c}{#1}%
+  \iftoggle{swaptrans:#1}
+    {\toggletrue{swaptrans}%
+     \usebibmacro{trans:c:combos}%
+     \usebibmacro{ed:c:combos}{#1}%
+     \togglefalse{swaptrans}}%
+    {\usebibmacro{ed:c:combos}{#1}%
+     \usebibmacro{trans:c:combos}}}
 
-\newbibmacro*{test:xeditor:b}{%
- \iffieldequalstr{\xeditor type}{maintitle}
-   {\toggletrue{noed}}%
-   {\ifdefempty{\xtitle}
-      {\ifboolexpr{ test {\iffieldequalstr{\xeditor type}{compiler}}
-                    or test {\iffieldequalstr{\xeditor type}{comped}}
-                    or test {\iffieldequalstr{\xeditor type}{comprev}}
-                    or test {\iffieldequalstr{\xeditor type}{comptrans}}
-                    or test {\iffieldequalstr{\xeditor type}{compup}}
-                    or test {\iffieldequalstr{\xeditor type}{editor}}
-                    or test {\iffieldequalstr{\xeditor type}{edcomp}}
-                    or test {\iffieldequalstr{\xeditor type}{edrev}}
-                    or test {\iffieldequalstr{\xeditor type}{edtrans}}
-                    or test {\iffieldequalstr{\xeditor type}{edup}}
-                    or test {\iffieldequalstr{\xeditor type}{reviser}}
-                    or test {\iffieldequalstr{\xeditor type}{revcomp}}
-                    or test {\iffieldequalstr{\xeditor type}{reved}}
-                    or test {\iffieldequalstr{\xeditor type}{revtrans}}
-                    or test {\iffieldequalstr{\xeditor type}{revup}}
-                    or test {\iffieldequalstr{\xeditor type}{transcomp}}
-                    or test {\iffieldequalstr{\xeditor type}{transed}}
-                    or test {\iffieldequalstr{\xeditor type}{transrev}}
-                    or test {\iffieldequalstr{\xeditor type}{transup}}
-                    or test {\iffieldequalstr{\xeditor type}{updater}}
-                    or test {\iffieldequalstr{\xeditor type}{upcomp}}
-                    or test {\iffieldequalstr{\xeditor type}{uped}}
-                    or test {\iffieldequalstr{\xeditor type}{uprev}}
-                    or test {\iffieldequalstr{\xeditor type}{uptrans}}
-                    or test {\iffieldequalstr{\xeditor type}{title}}
-                    or test {\iffieldundef{\xeditor type}}}
-         {}
-         {\toggletrue{noed}}}
-      {}}}
+\newbibmacro*{test:ed:c}[1]{%
+  \renewcommand*{\do}[1]{%
+    \ifnameundef{##1}
+      {\toggletrue{noed}}%
+      {\togglefalse{noed}%
+       \renewcommand*{\xeditor}{##1}%
+       \let\edtypes\empty
+       \forcsvfield{\listadd\edtypes}{\xeditor type}%
+       \ifinlist{#1}{\edtypes}
+         {\listbreak}%
+         {\toggletrue{noed}}}}% needs '%'
+  \docsvlist{editor,editora,editorb,editorc}}%
 
-\newbibmacro*{test:trans}{%
-  \usebibmacro{trans+transa+transb}%
-  \ifnameundef{\yeditor}
-    {\toggletrue{notrans}}%
-    {\iffieldequalstr{\yeditor type}{maintitle}
-       {\toggletrue{notrans}}%
-       {\ifdefstring{\yeditor}{translatorb}
-          {\ifboolexpr{ test {\ifdefempty{\xtitle}}
-                        or test {\ifdefstring{\xtitle}{book}}}
-             {\toggletrue{notrans}}%
-             {}}
-          {\ifdefstring{\yeditor}{translatora}
-             {\ifboolexpr{ test {\ifdefempty{\xtitle}}
-                           or test {\ifdefstring{\xtitle}{bookbook}}}
-                {\toggletrue{notrans}}%
-                {}}
-             {\ifboolexpr{ togl {collection}
-                           and togl {swapvol}
-                           and test {\ifdefstring{\xtitle}{book}}}
-                {\toggletrue{notrans}}%
-                {}}}}}}
+\newbibmacro*{test:trans:c}[1]{%
+  \renewcommand*{\do}[1]{%
+    \ifnameundef{##1}
+      {\toggletrue{notrans}}%
+      {\togglefalse{notrans}%
+       \renewcommand*{\yeditor}{##1}%
+       \let\transtypes\empty
+       \forcsvfield{\listadd\transtypes}{\yeditor type}%
+       \ifinlist{#1}{\transtypes}
+         {\listbreak}%
+         {\toggletrue{notrans}}}}% needs '%'
+  \docsvlist{translator,translatora,translatorb}}%
 
-% For editors of an 'issuetitle', 'maintitle', or 'series'.
-
-\newbibmacro*{editortypes}[1]{%
-  \ifboolexpr{ test {\iffieldequalstr{editortype}{#1}}
-               or test {\iffieldequalstr{editoratype}{#1}}
-               or test {\iffieldequalstr{editorbtype}{#1}}
-               or test {\iffieldequalstr{editorctype}{#1}}}
+\newbibmacro*{ed:c:combos}[1]{%
+  \iftoggle{noed}
+    {}
     {\usebibmacro{edtranspunct:c}%
-     \renewcommand*{\cbx at bibstring}{editor}%
-     \usebibmacro{editorlists}{#1}%
-     \usebibmacro{pluga+printnames}}%
-    {}}
+     \usebibmacro{edcombos:a}%
+     \usebibmacro{pluga+printnames}%
+     \setunit{\addcomma\space}%
+     \usebibmacro{editoraddon}{editor}%
+     \usebibmacro{editoraddon}{editora}%
+     \usebibmacro{ed:c:second}{#1}%
+     \setunit{\addcomma\space}%
+     \usebibmacro{editoraddon}{editora}}}
 
 \newbibmacro*{edtranspunct:c}{%
   \ifboolexpr{ togl {collection:bk}
@@ -1228,41 +1124,163 @@
     {\newunit}%
     {\setunit{\addcomma\space}}}
 
-\newbibmacro*{editorlists}[1]{%
-  \iffieldequalstr{editortype}{#1}
-    {\renewcommand*{\cbx at namelist}{editor}}%
-    {\iffieldequalstr{editoratype}{#1}
-       {\renewcommand*{\cbx at namelist}{editora}}%
-       {\iffieldequalstr{editorbtype}{#1}
-          {\renewcommand*{\cbx at namelist}{editorb}}%
-          {\renewcommand*{\cbx at namelist}{editorc}}}}}
+\newbibmacro*{trans:c:combos}{%
+  \iftoggle{notrans}
+    {}
+    {\usebibmacro{edtranspunct:c}%
+     \usebibmacro{transcombos:a}%
+     \usebibmacro{pluga+printnames}}}
 
-% For translators of a 'maintitle'.
-
-\newbibmacro*{translatortypes}{%
-  \ifboolexpr{ test {\iffieldequalstr{translatortype}{maintitle}}
-               or test {\iffieldequalstr{translatoratype}{maintitle}}}
+\newbibmacro*{ed:c:second}[1]{%
+  \usebibmacro{test:ed:c}{#1}%
+  \iftoggle{noed}
+    {}
     {\usebibmacro{edtranspunct:c}%
-     \renewcommand*{\cbx at bibstring}{translator}%
-     \iffieldequalstr{translatortype}{maintitle}
-       {\renewcommand*{\cbx at namelist}{translator}}%
-       {\renewcommand*{\cbx at namelist}{translatora}}%
-     \usebibmacro{pluga+printnames}}%
-    {}}
+     \usebibmacro{edcombos:a}%
+     \usebibmacro{pluga+printnames}}}
 
-% A catchall for additional editorial information about a 'title'.
+% Macros common to 'editors:a', 'editors:b', and 'editors:c'.
 
-\newbibmacro*{editoraddon}{%
-  \iffieldundef{editoraddon}
+\newbibmacro*{edcombos:a}{%
+  \renewcommand*{\cbx at namelist}{\xeditor}%
+  \ifnamesequal{\xeditor}{\yeditor}
+    {\clearname{\yeditor}%
+     \toggletrue{notrans}%
+     \usebibmacro{edcombos:b}{\edtypes}{edtrans}%
+     \iftoggle{atleastone}
+       {}
+       {\usebibmacro{edcombos:b}{\transtypes}{edtrans}}}
+    {\usebibmacro{edcombos:c}}}
+
+\newbibmacro*{transcombos:a}{%
+  \renewcommand*{\cbx at namelist}{\yeditor}%
+  \ifnamesequal{\xeditor}{\yeditor}
+    {\clearname{\xeditor}%
+     \toggletrue{noed}%
+     \usebibmacro{transcombos:b}{\edtypes}{transed}%
+     \iftoggle{atleastone}
+       {}
+       {\usebibmacro{transcombos:b}{\transtypes}{transed}}}
+    {\usebibmacro{transcombos:c}}}
+
+\newbibmacro*{edcombos:b}[2]{%
+  \togglefalse{atleastone}%
+  \renewcommand*{\do}[1]{%
+    \ifinlist{##1}{#1}
+      {\toggletrue{atleastone}%
+       \listbreak}%
+      {}}% needs '%'
+  \docsvlist{comptrans,comp,compiler,comped,compex,comprev,compup,transcomp}%
+  \iftoggle{atleastone}
+    {\renewcommand*{\cbx at bibstring}{comptrans}}%
+    {\docsvlist{extrans,ex,excomp,exed,expander,exrev,exup,transex}%
+     \iftoggle{atleastone}
+       {\renewcommand*{\cbx at bibstring}{extrans}}%
+       {\docsvlist{revtrans,rev,revcomp,reved,revex,reviser,revup,transrev}%
+        \iftoggle{atleastone}
+          {\renewcommand*{\cbx at bibstring}{revtrans}}%
+          {\docsvlist{uptrans,up,upcomp,updater,uped,upex,uprev,transup}%
+           \iftoggle{atleastone}
+             {\renewcommand*{\cbx at bibstring}{uptrans}}%
+             {\renewcommand*{\cbx at bibstring}{#2}}}}}}
+
+\newbibmacro*{edcombos:c}{%
+  \renewcommand*{\do}[1]{%
+    \ifboolexpr{ test {\ifinlist{##1}{\edtypes}}
+                 or test {\ifstrequal{##1}{editor}}}
+      {\usebibmacro{swapstrings}{##1}%
+       \listbreak}%
+      {}}% needs '%'
+  \docsvlist{comp,comped,compex,compiler,comprev,comptrans,compup,ed,edcomp,edex,edrev,edtrans,edup,
+             ex,excomp,exed,expander,exrev,extrans,exup,rev,revcomp,reved,revex,reviser,revtrans,
+             revup,transcomp,transed,transex,transrev,transup,up,upcomp,updater,uped,upex,uprev,
+             uptrans,editor}}%
+
+\newbibmacro*{transcombos:b}[2]{%
+  \togglefalse{atleastone}%
+  \renewcommand*{\do}[1]{%
+    \ifinlist{##1}{#1}
+      {\toggletrue{atleastone}%
+       \listbreak}%
+      {}}% needs '%'
+  \docsvlist{transcomp,comp,comped,compex,compiler,comprev,comptrans,compup}%
+  \iftoggle{atleastone}
+    {\renewcommand*{\cbx at bibstring}{transcomp}}%
+    {\docsvlist{transex,ex,excomp,exed,expander,exrev,extrans,exup}%
+     \iftoggle{atleastone}
+       {\renewcommand*{\cbx at bibstring}{transex}}%
+       {\docsvlist{transrev,rev,revcomp,reved,revex,reviser,revtrans,revup}%
+        \iftoggle{atleastone}
+          {\renewcommand*{\cbx at bibstring}{transrev}}%
+          {\docsvlist{transup,up,upcomp,updater,uped,upex,uprev,uptrans}%
+           \iftoggle{atleastone}
+             {\renewcommand*{\cbx at bibstring}{transup}}%
+             {\renewcommand*{\cbx at bibstring}{#2}}}}}}
+
+\newbibmacro*{transcombos:c}{%
+  \renewcommand*{\do}[1]{%
+    \ifboolexpr{ test {\ifinlist{##1}{\transtypes}}
+                 or test {\ifstrequal{##1}{translator}}}
+      {\usebibmacro{swapstrings}{##1}%
+       \listbreak}%
+      {}}% needs '%'
+  \docsvlist{comptrans,edtrans,extrans,revtrans,transcomp,transed,transex,transrev,transup,uptrans,
+             translator}}%
+
+\newbibmacro*{swapstrings}[1]{%
+  \iftoggle{swaptrans}
+    {\ifstrequal{#1}{comptrans}
+       {\renewcommand*{\cbx at bibstring}{transcomp}}%
+       {\ifstrequal{#1}{edtrans}
+          {\renewcommand*{\cbx at bibstring}{transed}}%
+          {\ifstrequal{#1}{extrans}
+             {\renewcommand*{\cbx at bibstring}{transex}}%
+             {\ifstrequal{#1}{revtrans}
+                {\renewcommand*{\cbx at bibstring}{transrev}}%
+                {\ifstrequal{#1}{transcomp}
+                   {\renewcommand*{\cbx at bibstring}{comptrans}}%
+                   {\ifstrequal{#1}{transed}
+                      {\renewcommand*{\cbx at bibstring}{edtrans}}%
+                      {\ifstrequal{#1}{transex}
+                         {\renewcommand*{\cbx at bibstring}{extrans}}%
+                         {\ifstrequal{#1}{transrev}
+                            {\renewcommand*{\cbx at bibstring}{revtrans}}%
+                            {\ifstrequal{#1}{transup}
+                               {\renewcommand*{\cbx at bibstring}{uptrans}}%
+                               {\ifstrequal{#1}{uptrans}
+                                  {\renewcommand*{\cbx at bibstring}{transup}}%
+                                  {\renewcommand*{\cbx at bibstring}{#1}}}}}}}}}}}}
+    {\renewcommand*{\cbx at bibstring}{#1}}}
+
+\newbibmacro*{addplus+etc}{%
+  \iftoggle{cbx:short}
     {}
-    {\nopunct\printfield{editoraddon}%
-     \clearfield{editoraddon}}}
+    {\usebibmacro{addplus}%
+     \renewcommand*{\plugb}{%
+       \addcomma\space\bibsstring{\cbx at bibstring}}}}
 
+\newbibmacro*{addplus}{%
+  \ifnameundef{\xeditor}
+    {\ifnameundef{\yeditor}
+       {}
+       {\ifnumgreater{\value{\yeditor}}{1}
+          {\edef\cbx at bibstring{\cbx at bibstring +}}%
+          {}}}
+    {\ifnumgreater{\value{\xeditor}}{1}
+       {\edef\cbx at bibstring{\cbx at bibstring +}}%
+       {}}}
+
+\newbibmacro*{editoraddon}[1]{%
+  \ifboolexpr{ test {\iffieldundef{#1addon}}
+               or not test {\ifdefstring{\xeditor}{#1}}}
+    {}
+    {\nopunct\printfield{#1addon}%
+     \clearfield{#1addon}}}
+
 %%%%%%%%%%%%%%%%%%%%%%%%
 %%  Names and Dashes  %%
 %%%%%%%%%%%%%%%%%%%%%%%%
 
-% HERE
 \newbibmacro*{printnames+etc}{%
   \ifboolexpr{ togl {authposition}
                and togl {bibliography}}
@@ -1304,7 +1322,7 @@
      \printfield[parens]{handle}%
      \clearfield{handle}}}
 
-% In short citations, omit addons. See CMOS, 17th ed., 14.80 and
+% Omit addons in short citations. See CMOS, 17th ed., 14.80 and
 % 14.209.
 
 \newbibmacro*{nameaddon}{%
@@ -1333,7 +1351,7 @@
   \let\anona\empty
   \let\anonb\empty
   \let\pluga\empty
-  \let\plugb\empty}%
+  \let\plugb\empty}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %%  Titles and Subtitles  %%
@@ -1442,7 +1460,7 @@
        {\bibstring{in}\space
         \renewcommand*{\xtitle}{issue}%
         \usebibmacro{longtitle+titleaddon}%
-        \usebibmacro{editortypes}{issuetitle}}%
+        \usebibmacro{editors:c}{issuetitle}}%
      \newunit\bibstring{special}%
      \setunit{\addcomma\space}}}
 
@@ -1886,7 +1904,7 @@
   \usebibmacro{author+bookauthor+etc}%
   \usebibmacro{title+labelyear}%
   \usebibmacro{note}%
-  \usebibmacro{edtrans}}%
+  \usebibmacro{editors:b}}%
 
 \newbibmacro*{articles}{%
   \newunit
@@ -1947,7 +1965,7 @@
      \usebibmacro{longtitle+titleaddon}%
      \toggletrue{edshift}%
      \usebibmacro{byauthor}%
-     \usebibmacro{edtrans}%
+     \usebibmacro{editors:b}%
      \usebibmacro{volumes+bookseries+etc}}%
     {\usebibmacro{title+labelyear}%
      \usebibmacro{byauthor}%
@@ -1954,7 +1972,7 @@
      \iffieldundef{maintitle}
        {\usebibmacro{note+edition+etc}%
         \usebibmacro{volumes+bookseries+etc}}%
-       {\usebibmacro{edtrans}%
+       {\usebibmacro{editors:b}%
         \usebibmacro{volumes+bookseries+etc}%
         \usebibmacro{maintitle+note+etc}}}
   \usebibmacro{date+loc+etc}%
@@ -1970,15 +1988,15 @@
     {\usebibmacro{author+bookauthor+etc}%
      \iffieldundef{title}
        {\usebibmacro{booktitle}%
-        \usebibmacro{edtrans}}%
+        \usebibmacro{editors:b}}%
        {\ifboolexpr{ togl {collection:ib}
                      and togl {swapvol}
                      and not togl {collection:icib}}
           {\usebibmacro{booktitle}%
-           \usebibmacro{edtrans}}%
+           \usebibmacro{editors:b}}%
           {\usebibmacro{title+labelyear}%
            \usebibmacro{byauthor}%
-           \usebibmacro{edtrans}%
+           \usebibmacro{editors:b}%
            \usebibmacro{chapter+in}}}}
     {\usebibmacro{supplement}%
      \newunit
@@ -1996,7 +2014,7 @@
         \ifcsdef{c@\thefield{crossref}}
           {\setcounter{\thefield{crossref}}{0}}%
           {\newcounter{\thefield{crossref}}}% needs '%'
-        \usebibmacro{incollections}}}}
+           \usebibmacro{incollections}}}}
 
 \newbibmacro*{websites}{%
   \ifboolexpr{ test {\iffieldundef{blogtitle}}
@@ -2029,7 +2047,7 @@
   \iftoggle{shortfirst}
     {}
     {\toggletrue{edshift}%
-     \usebibmacro{edtrans}}}
+     \usebibmacro{editors:b}}}
 
 \newbibmacro*{inst+loc+date}{%
   \usebibmacro{thesis+type}%
@@ -2095,7 +2113,7 @@
         \printfield{series}}%
      \isdot\addcomma
      \usebibmacro{seriesaddon}%
-     \usebibmacro{editortypes}{series}%
+     \usebibmacro{editors:c}{series}%
      \newunit}}%
 
 \newbibmacro*{volume}{%
@@ -2197,11 +2215,7 @@
   \usebibmacro{maintitle}%
   \usebibmacro{note}%
   \usebibmacro{edition}{}%
-  \iftoggle{swaptrans}
-    {\usebibmacro{translatortypes}%
-     \usebibmacro{editortypes}{maintitle}}%
-    {\usebibmacro{editortypes}{maintitle}%
-     \usebibmacro{translatortypes}}}
+  \usebibmacro{editors:c}{maintitle}}%
 
 \newbibmacro*{volume+number+etc}{%
   \iffieldundef{\xvolume volume}
@@ -2247,14 +2261,13 @@
 \newbibmacro*{note+edition+etc}{%
   \usebibmacro{note}%
   \usebibmacro{edition}{}%
-  \usebibmacro{edtrans}}%
+  \usebibmacro{editors:b}}%
 
 \newbibmacro*{edition}[1]{%
   \iffieldundef{edition}
     {}
     {\iftoggle{edshift}
-       {\setunit{\addcomma\space}%
-        \togglefalse{edshift}}%
+       {\setunit{\addcomma\space}}%
        {\newunit}%
      \iffieldbibstring{edition}
        {\bibstring{\thefield{edition}}}
@@ -2431,8 +2444,7 @@
      \newunit
      \printfield{series}%
      \usebibmacro{seriesaddon}%
-     \usebibmacro{editortypes}{series}%
-     \setunit{\addcomma\space}}}
+     \usebibmacro{editors:c}{series}}}
 
 \newbibmacro*{seriesaddon}{%
   \iffieldundef{seriesaddon}
@@ -2468,10 +2480,8 @@
     {}}
 
 \newbibmacro*{other:number}{%
-  \ifboolexpr{ test {\iffieldequalstr{editortype}{series}}
-               or test {\iffieldequalstr{editoratype}{series}}
-               or test {\iffieldequalstr{editorbtype}{series}}
-               or test {\iffieldequalstr{editorctype}{series}}}
+  \ifboolexpr{ test {\ifinlist{series}{\edtypes}}
+               or test {\ifinlist{series}{\transtypes}}}
     {\setunit{\addcomma\space}%
      \printfield{number}}%
     {\setunit{\addspace}% not '\setunit{\space}'
@@ -2513,7 +2523,7 @@
      \usebibmacro{longtitle+titleaddon}%
      \toggletrue{edshift}%
      \usebibmacro{byauthor}%
-     \usebibmacro{edtrans}}%
+     \usebibmacro{editors:b}}%
     {\usebibmacro{volume+number+etc}%
      \toggletrue{edshift}%
      \usebibmacro{booktitle}%
@@ -2531,10 +2541,10 @@
      \usebibmacro{volumes+bookseries+etc}%
      \toggletrue{edshift}%
      \usebibmacro{booktitle}%
-     \usebibmacro{edtrans}}%
+     \usebibmacro{editors:b}}%
     {\toggletrue{edshift}%
      \usebibmacro{booktitle}%
-     \usebibmacro{edtrans}%
+     \usebibmacro{editors:b}%
      \renewcommand*{\xvolume}{book}%
      \usebibmacro{volume+number+etc}%
      \iftoggle{collection:icbk}

Modified: trunk/Master/texmf-dist/tex/latex/windycity/windycity.cbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/windycity/windycity.cbx	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/tex/latex/windycity/windycity.cbx	2021-05-03 21:12:04 UTC (rev 59067)
@@ -1,4 +1,4 @@
-% Last modified: Sat 30 Jan 2021 06:17:55 PM CST
+% Last modified: Sun 02 May 2021 01:14:43 PM CDT
 
 % Permission is granted to copy, distribute and/or modify this
 % software under the terms of the LaTeX Project Public License (LPPL),
@@ -11,7 +11,7 @@
 % implied warranties of merchantability and fitness for a particular
 % purpose.
 
-\ProvidesFile{windycity.cbx}[2021/01/30 Windy City citation style for
+\ProvidesFile{windycity.cbx}[2021/05/02 Windy City citation style for
   biblatex]
 \@ifpackagelater{biblatex}{2019/08/17}
   {}
@@ -360,6 +360,22 @@
     {}
     {\newunit}}%
 
+% Thanks to David Fussner's biblatex-chicago for pointing me to this
+% command by Philipp Lehman. Source:
+% https://groups.google.com/forum/#!topic/comp.text.tex/kG003fkZK1I
+
+\newrobustcmd*{\iffieldstart}[2]{%
+  \iffieldundef{#1}
+    {\@secondoftwo}% originally '\@gobbletwo'
+    {\begingroup
+     \edef\@tempa{%
+       \long\def\noexpand\iffieldstart at i####1\detokenize{#2}####2}%
+     \@tempa\@nil{\endgroup\ifblank{##1}}%
+     \savefield*{#1}{\@tempa}%
+     \expandafter\iffieldstart at i\detokenize
+     \expandafter\expandafter\expandafter{%
+       \expandafter\@tempa\detokenize{#2}}\@nil}}%
+
 \newbibmacro*{volume+page}{%
   \iffieldundef{volume}
     {}

Modified: trunk/Master/texmf-dist/tex/latex/windycity/windycity.dbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/windycity/windycity.dbx	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/tex/latex/windycity/windycity.dbx	2021-05-03 21:12:04 UTC (rev 59067)
@@ -1,4 +1,4 @@
-\ProvidesFile{windycity.dbx}[2021/01/30 Windy City data model file for
+\ProvidesFile{windycity.dbx}[2021/05/02 Windy City data model file for
   biblatex]
 \DeclareDatamodelFields[type=field,datatype=literal]{%
   blogsubtitle,
@@ -6,10 +6,13 @@
   blogtitleaddon,
   bookauthortype,
   bookbooktitle,
+  bookvolume,
   bookbookvolume,
-  bookvolume,
+  booktitlekey,
+  bookbooktitlekey,
   bookyear,
   editoraddon,
+  editoraaddon,
   endbookyear,
   handle,
   seriesaddon,
@@ -17,8 +20,10 @@
   shortbooktitle,
   shortmaintitle,
   shortorganization,
+  titlekey,
+  translatortype,
   translatoratype,
-  translatortype}
+  translatorbtype}
 \DeclareDatamodelFields[type=list,datatype=name]{%
   preface,
   shortbookauthor,

Modified: trunk/Master/texmf-dist/tex/latex/windycity/windycity.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/windycity/windycity.sty	2021-05-03 21:11:49 UTC (rev 59066)
+++ trunk/Master/texmf-dist/tex/latex/windycity/windycity.sty	2021-05-03 21:12:04 UTC (rev 59067)
@@ -1,4 +1,4 @@
-% Last modified: Tue 10 Nov 2020 07:45:15 AM CST
+% Last modified: Tue 13 Apr 2021 05:25:58 PM CDT
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesPackage{windycity}
 \RequirePackage{ifxetex}
@@ -164,17 +164,17 @@
 
 \defbibheading{biblist}{%
   \newpage
-  \begin{center}\section*{Abbreviations}\end{center}
+  \section*{Abbreviations}
   \addcontentsline{toc}{section}{Abbreviations}
   \markright{Abbreviations}}%
 \defbibheading{bibliography}{%
   \newpage
-  \begin{center}\section*{Bibliography (Standard Format)}\end{center}
+  \section*{Bibliography (Standard Format)}
   \addcontentsline{toc}{section}{Bibliography (Standard Format)}
   \markright{Bibliography}}%
 \defbibheading{references}{%
   \newpage
-  \begin{center}\section*{References (Author-Date Format)}\end{center}
+  \section*{References (Author-Date Format)}
   \addcontentsline{toc}{section}{References (Author-Date Format)}
   \markright{References}}%
 \defbibheading{none}{}%



More information about the tex-live-commits mailing list.